码。

Set<String> set = new HashSet<String>(3);
set.add("3 Lorem");
set.add("1 Lorem");
set.add("2 Lorem");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
    String type = (String) iterator.next();
    System.out.println(type);
}


输出。

2 Lorem
3 Lorem
1 Lorem


这个命令对我来说很奇怪。我先添加3 Lorem1 Lorem,然后再添加2 Lorem。为什么它们在输出中的顺序不同?

最佳答案

JavaDocs


  此类实现由哈希表支持的Set接口
  (实际上是一个HashMap实例)。它不保证
  集的迭代顺序;特别是,它不能保证
  随着时间的推移,订单将保持不变。此类允许null
  元件。


如果您打算保持订单更好地使用TreeSet(但复杂度将为log(n)

也检查这个帖子
Hashset vs Treeset

@Petar指出的EDIT为了更好地保持插入顺序,请使用LinkedHashSet

这个Dzone Article通过示例和性能很好地展示了这三个实例之间的比较

关于java - Java中未排序的HashSet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19812366/

10-10 22:10