UPDATED :
Set s = new HashSet();
s.add(1);
s.add(5);
s.add(4);
s.add(9);
s.add(7);
s.add(8);
s.add("b");
s.add("a");
s.add("B");
s.add("A");
s.add("s");
s.add("x");
s.add("d");
System.out.println(s);
s.remove("b");
s.remove("d");
System.out.println(s);
输出:
[1, d, 4, b, 5, A, B, 7, a, 8, 9, s, x]
[1, 4, 5, A, B, 7, a, 8, 9, s, x]
[1, 4, 5, A, B, 7, a, 8, 9, s, x]
我们在添加时需要设置默认排序整数值的一些信息,但如果我添加字符串到设置它默认情况下不会排序 .
Update: 并且在运行多次后总是将Caps字母排序 .
java版“1.6.0_26”Java(TM)SE运行时环境(版本1.6.0_26-b03)Java HotSpot(TM)客户端VM(版本20.1-b02,混合模式,共享)
请给我一些想法 . 谢谢
4 回答
HashSet
不保证其内容将以任何方式排序 . 有一个特殊的接口可以提供这样的保证:它被称为SortedSet:在Java 6中,有两个实现此接口的类:ConcurrentSkipListSet和TreeSet .
不,
HashSet
没有排序 - 或者至少,不可靠 . 您可能碰巧在某些情况下订购,但您不能依赖它 . 例如,它可能总是返回按"hash code modulo some prime"排序的条目 - 但它无论如何都几乎肯定没有用 .如果需要有序集实现,请查看TreeSet .
从Oracle文档中我们可以发现HashSet类实现了set接口并由Hash Table内部支持 . 它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变 . 但我发现的代码即使经过一段时间后也会发现它的排序 .
O / P
我建议你查一下Set interface javaDoc . 在 All Known Implementing Classes 部分中,您有所提供的实现,如果您检查HashSet,则第一个句子回答您的问题 .
顺便说一句 . 检查javaDoc总是一个好的开始;-)