您的位置:首页 > 其它

HashSet整数排序的小技巧

2013-09-06 00:00 260 查看
众所周知HashSet是无序的,但当存储正整数时,是可以保证数据正序。例如

Set set = new HashSet();
set.add(new Integer(2));
set.add(new Integer(1));
System.out.println(set);

输出的结果是 [1,2]
但是当数字大于15时,就会出现乱序,因为HashSet初始大小是16。例如

Set set = new HashSet();
set.add(new Integer(16));
set.add(new Integer(2));
set.add(new Integer(1));
System.out.println(set);


输出的结果是 [1, 16, 2]

为了保证排序结果,需要指定HashSet容器初始大小。例如

  Set set = new HashSet(17);
set.add(new Integer(16));
set.add(new Integer(2));
set.add(new Integer(1));
System.out.println(set);

输出的结果是 [1, 2 ,16]

HashSet的内部实现是对HashMap进行了简单的包装,它的内部有两个关键的成员:

HashMap map用来存储数据.

静态变量Object PRESENT = new Object() 是调用map的put方法时作为存储的值使用.

每次HashSet进行add(E e)方法时,就会调用map的put(e,PRESENT)方法,用map的键来保存set的值,这样就保证了set中不会出现重复的元素。

HashMap在保存键值使用的是数组,会先计算键值的哈希值,然后根据数组的大小找到存储的位置。而整数的HashCode等于本身,当然只要数组够大,每次都会被放到Array[value-1]的位置,从而保证了HashSet中整数的排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HashSet原理
相关文章推荐