HashSet整数排序的小技巧
2013-09-06 00:00
260 查看
众所周知HashSet是无序的,但当存储正整数时,是可以保证数据正序。例如
输出的结果是 [1,2]
但是当数字大于15时,就会出现乱序,因为HashSet初始大小是16。例如
输出的结果是 [1, 16, 2]
为了保证排序结果,需要指定HashSet容器初始大小。例如
输出的结果是 [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中整数的排序。
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中整数的排序。
相关文章推荐
- 二维数组中的查找-在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 给你一个由n-1个整数组成的未排序的序列,其元素都是1到n中的不同的整数。请写出一个寻找序列中缺失整数的线性时间算法。
- LintCode 463.整数排序 II [快速排序基础应用]
- 1097 -- 三整数排序
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 那些年我们刷过的算法题(排序)---有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- java实现整数选择排序
- 例题课本例题3-1转换==整数从大到小排序
- 华为OJ平台试题 —— 整数排序
- 给定一个没有重复的已排序整数数组,返回其范围的摘要。
- 冒泡排序和希尔排序案列详解(要求输入10个整数,输出排序结果)
- lintcode整数排序的完整c++代码
- 1487 大批整数排序
- HashSet下的字符串排序,关键字,HashSet转TreeSet()
- 博客总结八——1M内存排序1000w整数
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 整数排序
- 给三个整数排序(第十七周上机任务)