Java Set сохранить порядок?

Сохраняет ли Java-набор порядок? Метод возвращает мне Set, и, предположительно, данные упорядочены, но итерируя по Set, данные неупорядочены. Есть ли лучший способ справиться с этим? Нужно ли менять метод, чтобы он возвращал что-то отличное от Set?

 keyser25 мая 2012 г., 12:29
& quot; элементы возвращаются в произвольном порядке (если этот набор не является экземпляром некоторого класса, который предоставляет гарантию). & quot; это то, что говорит метод итератора для набора. найденныйhere

Ответы на вопрос(12)

которая поддерживает двусвязный список для всех элементов. Используйте этот класс вместо HashSet, если вам важен порядок итераций.

SortedSet может сделать заказ изSet

 23 июн. 2015 г., 12:04
Как насчет TreeSet?
 25 мая 2012 г., 12:42
Вопрос в том, чтобы сохранить порядок вставки (который сортируется).
Решение Вопроса

Set Интерфейс не предоставляет никаких гарантий заказа.

Его подинтерфейсSortedSet представляет набор, отсортированный по некоторому критерию. В Java 6 есть два стандартных контейнера, которые реализуютSortedSet, Они естьTreeSet а такжеConcurrentSkipListSet.

В добавок кSortedSet интерфейс, есть такжеLinkedHashSet учебный класс. Он запоминает порядок, в котором элементы были вставлены в набор, и возвращает его элементы в этом порядке.

 17 нояб. 2014 г., 17:15
Кроме того, из-заdifferent String hashing в Java 8 будет изменен порядок по умолчанию (несортированный) в наборах и картах. Если вы полагаетесь на несортированный порядок, ваш код будет работать по-другому в Java 8.
 25 февр. 2019 г., 09:39
Я понимаю, что класс, не упорядочивающий, является нормальным, но я ожидал, что поведение будет оставлять их, как они были представлены, и не портить порядок, а просто перетасовывать элементы каждый раз при агрегировании. Ваше решение не является оптимальным, потому что тогда мне придется реализовать целую структуру, чтобы они были отсортированы ЖЕ ПУТЬ, как они были представлены: S

LinkedHashSet это то, что вам нужно.

 07 июн. 2013 г., 00:03
List это неSet (это не гарантирует уникальность членства).
 09 июл. 2015 г., 17:34
Во многих бизнес-уникальных случаях список нельзя использовать просто для сохранения порядка вместо набора. LinkedHashSet поддерживает порядок и хранит уникальные.

Set реализации доступны в Java:

keep the insertion order: LinkedHashSet and CopyOnWriteArraySet (thread-safe) keep the items sorted within the set: TreeSet, EnumSet (specific to enums) and ConcurrentSkipListSet (thread-safe) does not keep the items in any specific order: HashSet (the one you tried)

Для вашего конкретного случая вы можете сначала отсортировать элементы, а затем использовать любой из 1 или 2 (наиболее вероятно,LinkedHashSet или жеTreeSet). Или альтернативно иmore efficientlyВы можете просто добавить несортированные данные вTreeSet который позаботится о сортировке автоматически для вас.

такой как HashSet, чтобы быстро найти изумруд, но вы можете попробовать LinkedHashSet, он сохранит порядок, в который вы положили.

вы должны использовать конкретную реализацию этого интерфейса и подчиненного интерфейса SortedSet, например TreeSet или LinkedHashSet. Вы можете обернуть ваш набор следующим образом:

Set myOrderedSet = new LinkedHashSet(mySet);

Как многие из членов предложили использоватьLinkedHashSet сохранить порядок сбора. Вы можете обернуть ваш набор с помощью этой реализации.

SortedSet Реализация может быть использована для отсортированного заказа, но для вашей цели использоватьLinkedHashSet.

Также из документов,

& quot; Эта реализация избавляет своих клиентов от неопределенного, как правило, хаотического порядка, предоставляемого HashSet, без увеличения стоимости, связанного с TreeSet. Его можно использовать для создания копии набора, который имеет тот же порядок, что и оригинал, независимо от реализации исходного набора: & quot;

Источник :http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html

возвращаемый Set, не должен возвращать данные Упорядоченным способом. Видеть этоДва java.util.Iterator к одной коллекции: они должны возвращать элементы в том же порядке?

Set.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).

И, как уже говорилосьshuuchan,TreeSet является реализациейSet это имеет гарантированный заказ:

The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used.

List илиLinkedHashSet.

 25 мая 2012 г., 12:53
упс ... Спасибо, что заметили.

SortedSet делает однако.

Ваш ответ на вопрос