神奇的hashset addAll,哪位高手能解释一下
神奇的hashset addAll,谁能解释一下
public static void main(String[] args)
{
Integer[] data = new Integer[50];//定义一个数组
for (int i = 0; i < 50; i++) {
data[i]=(int) (Math.random()*20);
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+",");
}
System.out.println();
Set set = new HashSet();//new 一个hashset
set.addAll(Arrays.asList(data));//将数组转为list并存入set中,就可以去掉重复项了
for (Object object : set) {
System.out.print(object+",");
}
}
打印结果:
7,11,9,19,4,1,8,17,4,14,17,15,4,14,7,16,17,5,6,14,9,15,17,14,19,6,19,7,7,2,8,11,19,12,14,10,15,6,17,3,7,10,11,2,4,14,2,17,8,13,
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,
问题:set不是只有去重复功能吗,为什么还自动实现了排序了
------解决思路----------------------
和哈希Code有关吧,换成字符串就不一样了:
------解决思路----------------------
hashset 是按hash值存放数据的,你这只能说是一种巧合
------解决思路----------------------
hashset是根据哈希码存放的,你这纯粹是巧合,你看我运行的结果就不一样
9,12,17,18,0,4,9,4,1,5,15,3,8,17,11,15,15,10,6,7,15,12,14,0,16,19,12,5,10,0,14,12,10,1,19,2,10,15,6,7,9,11,17,3,8,17,17,11,11,0,
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,17,16,19,18,
------解决思路----------------------
楼主的应该是java8吧,8的HashMap中的hash算法比6的要简单,直接导致这种分布较均匀的连续数会比较整齐
但千万不要将排序寄望于HashMap
------解决思路----------------------
8L说得对。
这只是碰巧,万一以后HashSet的实现变了呢。。
public static void main(String[] args)
{
Integer[] data = new Integer[50];//定义一个数组
for (int i = 0; i < 50; i++) {
data[i]=(int) (Math.random()*20);
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+",");
}
System.out.println();
Set set = new HashSet();//new 一个hashset
set.addAll(Arrays.asList(data));//将数组转为list并存入set中,就可以去掉重复项了
for (Object object : set) {
System.out.print(object+",");
}
}
打印结果:
7,11,9,19,4,1,8,17,4,14,17,15,4,14,7,16,17,5,6,14,9,15,17,14,19,6,19,7,7,2,8,11,19,12,14,10,15,6,17,3,7,10,11,2,4,14,2,17,8,13,
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,
问题:set不是只有去重复功能吗,为什么还自动实现了排序了
------解决思路----------------------
和哈希Code有关吧,换成字符串就不一样了:
public static void main(String[] args) {
String[] data = new String[50];// 定义一个数组
for (int i = 0; i < 50; i++) {
data[i] = String.valueOf((int) (Math.random() * 20));
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + ",");
}
System.out.println();
Set<String> set = new HashSet<String>();// new 一个hashset
set.addAll(Arrays.asList(data));// 将数组转为list并存入set中,就可以去掉重复项了
for (Object object : set) {
System.out.print(object + ",");
}
}
------解决思路----------------------
hashset 是按hash值存放数据的,你这只能说是一种巧合
------解决思路----------------------
hashset是根据哈希码存放的,你这纯粹是巧合,你看我运行的结果就不一样
9,12,17,18,0,4,9,4,1,5,15,3,8,17,11,15,15,10,6,7,15,12,14,0,16,19,12,5,10,0,14,12,10,1,19,2,10,15,6,7,9,11,17,3,8,17,17,11,11,0,
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,17,16,19,18,
------解决思路----------------------
楼主的应该是java8吧,8的HashMap中的hash算法比6的要简单,直接导致这种分布较均匀的连续数会比较整齐
但千万不要将排序寄望于HashMap
------解决思路----------------------
8L说得对。
这只是碰巧,万一以后HashSet的实现变了呢。。