новая запись в хешсете - PullRequest
0 голосов
/ 07 июня 2011

Есть ли способ узнать, какие последние новые записи были добавлены в хэш-сет? В моей программе первый цикл добавляет [Эмми, Карл], а затем во втором цикле он добавляет [Эмми, Дэн, Карл]. В любом случае, я могу просто использовать дан, а не остальные из них для третьего цикла?

Ответы [ 5 ]

6 голосов
/ 07 июня 2011

java.util.HashSet не сохраняет порядок, но java.util.LinkedHashSet делает. Вы можете использовать это вместо этого? Из Javadoc:

Эта реализация отличается от HashSet тем, что поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который является порядком, в котором элементы были вставлены в набор (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если элемент повторно вставляется в набор.

0 голосов
/ 07 июня 2011

Хорошо, если я правильно понимаю ваш пост и комментарии (ну, это довольно сложно, попробуйте быть более точным :)), что вы на самом деле хотите: а) не добавлять какие-либо элементы несколько раз в HashSet и б) посмотреть, еслинабор уже содержит данный элемент при попытке его добавить.

a) тривиально верно для каждого набора и для b) вы можете просто использовать возвращаемое значение add: если он возвращает false, он уже содержится вустановлен.

0 голосов
/ 07 июня 2011

Hashset поддерживаются хеш-таблицами, и нет никакой гарантии порядка поиска. Порядок поиска не будет таким же, как порядок вставки. Таким образом, нет возможности узнать, какой элемент был добавлен последним.

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

0 голосов
/ 07 июня 2011

HashSet s не содержат информацию о порядке добавления элементов. Вам необходимо заменить его коллекцией, которая выполняет (например, ArrayList).

0 голосов
/ 07 июня 2011
HashSet<String> oldpeople = new HashSet<String>();P
HashSet<String> newPeople;
for (Set<String> cycle : input)
{ 
    newPeople = new HashSet<String>();
    newPeople.addAll(cycle);
    newPeople.removeAll(oldPeople);
    oldPeople.addAll(cycle);
}

теперь у вас есть последний новый, всегда содержащийся в newPeople.

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