問題描述
如何在java中限制哈希集的默認排序 (how to restrict default ordering of Hash Set in java)
I have some of values in my java program. I just stored those values in HashSet
. I have stored it by for loop. The values iterating by loop has been ordered differently after the set formed. How can restrict this order change of HashSet
as I get from the loop. Can anyone help me please?
‑‑‑‑‑
參考解法
方法 1:
If you want the set to maintain the insertion order, you can use a LinkedHashSet:
Implementation of the Set interface, with predictable iteration order. This implementation differs from HashSet in that it maintains a doubly‑linked list running through all of its entries. This linked list defines the iteration ordering, which is the order in which elements were inserted into the set (insertion‑order).
Alternatively, if you want your set to be ordered, you can use a TreeSet.
方法 2:
A HashSet
is unordered, as the javadocs specify:
It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits the null element.
You might want to consider using a LinkedHashSet
, which maintains the order of insertions.
An alternative is using one of the NavigableSet
implementations, such as the TreeSet
which guarantee order according to the natural order or Comparator
, if given.
方法 3:
use LinkedHashSet predictable iteration order
(by Sangeetha Krishnan、assylias、amit、Anton Arhipov)