Сборник для хранения заблокированных строк - PullRequest
0 голосов
/ 02 февраля 2012

Я делаю приложение, в котором пользователи будут печатать по общему документу по сети. Одной из проблем является блокировка строк, которые вводят другие пользователи. Для этого у меня есть DocumentListener, который проверяет изменения строки. Когда пользователь успешно переходит на новую строку (что означает, что строка не используется), слушатель уведомит других пользователей о том, что линия теперь используется.

A DocumentFilter будет проверять каждый раз, когда редактирование выполнено, если эта строка заблокирована, прежде чем разрешить это.

Теперь одна из моих проблем заключается в том, какой тип коллекции наиболее подходит для хранения номеров строк. Коллекция будет держать только Integer. Когда линия заблокирована, она будет добавлена ​​в эту коллекцию. Когда DocumentFilter необходимо проверить, доступна ли строка, он пройдет через этот список. Также, когда пользователь, который использовал эту строку, переходит на новую строку, отправляется другое сообщение, которое удалит эту строку из коллекции пользователей.

Я знаю, что ArrayList, вероятно, будет достаточно, хотя я надеялся, что кто-то может думать иначе.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Что если пользователь добавит новую строку?Каждая сохраненная строка должна быть перемещена / перенумерована.А как насчет того, если пользователь выходит из программы или программа падает, или он просто идет домой на ужин?Вы реализуете какой-то тайм-аут?

В любом случае, SortedSet подойдет, но вам, возможно, следует сохранить в заданном элементе также время истечения.

0 голосов
/ 02 февраля 2012

Поскольку вам нужна уникальность, коллекция List определенно не подходит: вы хотите Set.

0 голосов
/ 02 февраля 2012

HashSet<Integer> превзойдет ArrayList<Integer> с большим отрывом, если вы ожидаете большое количество поисков и большое количество заблокированных документов.

Насколько я знаю, поиск в худшем случае (со ссылкой на "содержит")

  • O (n) - ArrayList
  • O (log2 (n)) - SortedList
  • O (1) - HashSet однако это связано с методом хеширования.

Если вам нужно отслеживать дополнительные данные для каждой блокировки, вы можете использовать HashMap<Integer, ILockInformation>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...