java 对象哈希值,Java中的对象的哈希值何时相等

不知道大家有没有注意过什么样的情况下两个对象的哈希值相同

为了解决上面出现的问题,我在做哈希比较的时候尝试着写了几个例子,发现了如下几点:

1.标准的基本类型只要值相等,哈希值就相同;

Integer a=10;

Integer b=10;

那么a和b的哈希值就相同。类似的还有Short、Long、Byte、Boolean、String等等

2.同一个对象,与何时运行该程序无关;

哈希值算法中,对象的内存地址不参与运算。因此只要是同一个对象,那么该对象的哈希值就不会改变。

3.关于容器的哈希值

java中常用的容器有List、Map、Set。那么它们的哈希值又有什么特点呢?

假设有如下两个List:

List list1= new ArrayList();

list1.add("item1");

list1.add("item2");

List list2= new ArrayList();

list2.add("item2");

list2.add("item1");

这两个List的哈希值是不一样的。对于List来讲,每一个元素都有它的顺序。如果被添加的顺序不同,最后的哈希值必然不同。

假如有如下两个Map:

Map map1= new HashMap();

map1.put("a", "1");

map1.put("b", "2");

map1.put("c", "3");

Map map2= new HashMap();

map2.put("b", "2");

map2.put("a", "1");

map2.put("c", "3");

这两个Map虽然元素添加的顺序不一样,但是每一个元素的Key-Value值一样。Map是一种无序的存储结构,因此它的哈希值与元素添加顺序无关,这两个Map的哈希值相同。

假如有如下两个Set:

Set set1= new HashSet();

set1.add("a");

set1.add("b");

set1.add("c");

Set set2= new HashSet();

set2.add("b");

set2.add("a");

set2.add("c");

类似的,由于Set也是一种无序的存储结构,两个Set虽然添加元素的顺序不一样,但是总体来说元素的个数和内容是一样的。因此这两个Set的哈希值也相同。

其实,Set的实现是基于Map的。我们可以看到,如果将Set中的元素当做Map中的Key,把Map中的value始终设置为null,那么它就变成了一个Set。

Set set1= new HashSet();

set1.add("a");

set1.add("b");

set1.add("c");

Map map1= new HashMap();

map1.put("a", null);

map1.put("b", null);

map1.put("c", null);

通过实验我最后得到了印证,set1与map1的哈希值相同。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值