码.
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);
}
Run Code Online (Sandbox Code Playgroud)
输出.
2 Lorem
3 Lorem
1 Lorem
Run Code Online (Sandbox Code Playgroud)
这个命令对我来说很奇怪.我添加3 Lorem,1 Lorem然后2 Lorem.为什么它们在输出中的顺序不同?
散列集不应该排序.
从技术上讲,它们是按照哈希码(或其哈希减少)进行排序的; 在哈希冲突中,它们可能会溢出到其他桶中.
如果您想要一个有序集,请TreeSet改用.它通常有点慢,但排序.如果您想保留插入顺序,使用List如ArrayList或LinkedList.
还有一种称为"混合"的混合,LinkedHashSet它允许快速contains操作,但保持插入顺序.请注意,它不会有重复.
从JavaDocs:
这个类实现了 Set 接口,由一个哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。此类允许空元素。
如果您打算更好地保持秩序,请使用TreeSet (但复杂性将为 log(n)
还要检查这篇文章 Hashset vs Treeset
正如@Petar 指出的那样编辑,以便更好地维护插入顺序,使用LinkedHashSet
这篇Dzone 文章展示了这三者之间的比较,并提供了很好的示例和性能
| 归档时间: |
|
| 查看次数: |
3416 次 |
| 最近记录: |