Java получить объекты из набора - PullRequest
0 голосов
/ 09 февраля 2012

В Java 5, если у меня есть набор, и я добавляю два объекта в набор. Когда я получу объекты, он вернет меня в том же порядке, что и я? Я не могу найти ответ на это. Зависит ли это от того, какую реализацию Set я использую?

Ответы [ 6 ]

9 голосов
/ 09 февраля 2012

Да, это зависит от того, какую реализацию вы используете.Например, LinkedHashSet сохранит порядок вставки:

Хеш-таблица и реализация связанного списка интерфейса Set с предсказуемым порядком итерации.Эта реализация отличается от HashSet тем, что поддерживает двусвязный список, проходящий через все его записи.Этот связанный список определяет порядок итераций, который является порядком, в котором элементы были вставлены в набор (порядок вставки).Обратите внимание, что порядок вставки не изменяется, если элемент повторно вставляется в набор.(Элемент e повторно вставляется в набор s, если s.add (e) вызывается, когда s.contains (e) возвращает true непосредственно перед вызовом.)

... но HashSet не будет:

Не дает никаких гарантий относительно порядка итерации набора;в частности, это не гарантирует, что порядок останется постоянным с течением времени.Этот класс допускает нулевой элемент.

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

Прямо из документации :

Элементы возвращаются в произвольном порядке (если этот набор не является экземпляром некоторого класса, который предоставляет гарантию).

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

Сам интерфейс Set предназначен для реализаций неупорядоченных контейнеров. Но могут быть реализации Set, которые возвращают элементы в определенном порядке.

Также см. Документацию Set.iterator:

Возвращает итератор для элементов этого набора. Элементы возвращаются в произвольном порядке (если этот набор не является экземпляром некоторого класса, который предоставляет гарантию)

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

JavaDocs - ваш лучший друг.Это зависит от реализации.Например:

java.util.Set:

Iterator<E> iterator(); 
Returns an iterator over the elements in this set. The elements are returned in no particular order (unless this set is an instance of some class that provides a guarantee).

и

java.util.TreeSet:

public Iterator<E> iterator();
Returns an iterator over the elements in this set in ascending order.
0 голосов
/ 09 февраля 2012

Да, это зависит от выбранной вами реализации. HashSet не гарантирует порядок, но LinedHashSet будет.

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

Зависит от Set реализации. LinkedHashSet делает именно это.

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