Как я могу получить доступ к последнему объекту, добавленному в HashSet? - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть HashSet, который представляет собой набор клиентских сокетов.Когда клиент подключается, сокет добавляется в HashSet.Затем мне нужно получить доступ к этому сокету, но я не знаю, как получить к нему доступ в HashSet.

... 
clientSockets.Add(listenerSocket.EndAccept(async));
WaitForData(lastAddedSocket);
....

Как определить, что такое lastAddedSocket?

Ответы [ 3 ]

6 голосов
/ 08 февраля 2011

Нет способа спросить HashSet "что было последним, что было добавлено к вам?" Все заказы перемешаны.

Вы должны просто сохранить отдельную переменную с именем lastAddedSocket. Каждый раз, когда вы добавляете сокет в HashSet, также присваивайте его lastAddedSocket. Тогда вы сможете найти его легко и в постоянном времени.

2 голосов
/ 08 февраля 2011

Обычно считается, что порядок хэш-набора не гарантирован. Хотя документация по Java выходит прямо и говорит об этом, ближайший MSDN - это

Набор - это коллекция, которая не содержит повторяющихся элементов и элементы которой расположены в произвольном порядке.

Информация благодаря: Сохраняет ли HashSet порядок вставки?

Тем не менее, вам должно быть довольно легко сохранить свой последний сокет самостоятельно.

0 голосов
/ 08 февраля 2011

Возможно, вы захотите, чтобы ваш последний был последним-последним, когда вы удаляете последний. Я рекомендую использовать Queue <> в дополнение к HashSet, чтобы вы всегда могли запомнить последовательность, в которой они прибыли, на случай, если последний уйдет.

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