1. 背景
自己在测试HashSet时,发现其输出Integer是有序的。
2. 测试
public static void hashSetObjectTest(){
Set<Integer> set = new HashSet<Integer>();
set.add(6);
set.add(3);
set.add(2);
set.add(1);
set.add(4);
set.add(5);
//set.add(100);
//set.add(130);
//set.add(22);
System.out.println("-------hashset 输出有序结果---------");
for(Integer value : set){
System.out.print(value+" ");
}
System.out.println();
}
3. 结果
-------hashset 输出有序结果---------
1 2 3 4 5 6
4. 分析
这是一种假象,数据少可能这样,但是数据多了,就无序了。
4.1 测试
public static void hashSetObjectTest(){
<span style="white-space:pre"> </span> Set<Integer> set = new HashSet<Integer>();
set.add(6);
set.add(3);
set.add(2);
set.add(1);
set.add(4);
set.add(5);
set.add(100);
set.add(130);
set.add(22);
System.out.println("-------hashset 输出有序结果---------");
for(Integer value : set){
System.out.print(value+" ");
}
System.out.println();
}
4.2 结果
-------hashset 输出有序结果---------
1 100 2 3 4 5 6 22 130
所以测试时,最好多测一点数据。
4.3 java api说明
This class implements the Set interface, backed by a hash table (actually a HashMap instance). 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.
该类实现了Set接口,通过hash table实现。HashSet的迭代器在输出时“不保证有序”,但也不是“保证无序”。也就是说,输出时有序也是允许的,但是你的程序不应该依赖这一点。
梅花香自古寒来