黑马程序员技术交流社区
标题:
关于HashSet的问题
[打印本页]
作者:
dicegame
时间:
2013-7-29 19:36
标题:
关于HashSet的问题
本帖最后由 杜光 于 2013-7-30 10:34 编辑
package qbb;
import java.util.*;
public class HashSetTest {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("java1");
hs.add("java2");
hs.add("java3");
hs.add("java4");
Iterator it = hs.iterator();
while(it.hasNext()) {
System.out.println(it.next());
System.out.println(it.next().hashCode());
}
}
}
复制代码
运行结果:
java1
100899409
java2
100899410
问题:
1.对象的地址和哈希码是什么关系呢?
2.HashSet中存放的是地址还是哈希码呢?
3.运行结果中为什么没有java3和java4呢?
作者:
哪颗最亮的星星
时间:
2013-7-29 20:44
HashSet的底层数据结构就是哈希码。
哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。
你这里java3和java4打印就是它的哈希值。
作者:
Joesph
时间:
2013-7-29 21:56
我就补充一下了,权当复习
while(it.hasNext())
{
System.out.println(it.next());
System.out.println(it.next().hashCode());
}
首先判断是否有下一个元素,有,true,进入循环体,打印java1,打印java3的哈希值,之后再判断条件,有,true,进入循环体,打印Java2,再打印java4的哈希值,在判断,false,退出
还有hashset是无序的(存入和取出的顺序不一定一致),所以就可能是
java1
100899409
java2
100899410
作者:
dicegame
时间:
2013-7-30 00:56
谢谢各位,现在懂了
对象的地址和对象的哈希码不同
HashSet的底层数据结构是哈希表,存放的是对象的哈希码
对象的哈希码一般通过哈希函数算出
哈希函数和对象的属性有关
while循环中有两个next方法
所以每while一次,游标向前移动两次
本来想打印每个对象和对应的哈希码
正确的代码是:
Object obj = it.next();
System.out.println(obj);
System.out.println(obj.hashCode);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2