集合类中泛型Integer与int的联系

先说结论:在集合类中,内置方法进行比较运算(如contains()、get())的时候,Integer等同于int。

集合类的泛型不允许使用基本数据类型,因此当我们需要使用int类型时往往会用Integer的泛型代替。这样,我们即可以向集合中添加Integer类型又可以添加int类型。我们知道,new不同Integer对象,以及-128~127范围外的Integer.valueOf()创建的对象都是不相等的,但在集合类中他们却相等。显然我们有必要通过源码了解一下集合类中对于这两种类型的处理。

事实上,集合类对于大小的比较,采用的是hash()、equals(),而它们比较的都是Integer对象的value值,它是一个int 类型。

new 一个Integer对象
在这里插入图片描述
equals方法
在这里插入图片描述
以上可以看出Integer的equals方法就是对值的比较。下面我们来看看集合类。

1.LinkedList类contains方法的中调用方法(该方法返回-1则contains判断为false)
在这里插入图片描述
2.HashSet集合类的contains方法的一个调用
在这里插入图片描述
可以看到此处需要比较hashcode值,那我们来看一下Integer类的hashcode值是如何计算的
在这里插入图片描述
直接返回了value值,这样我们就完全可以把它看作int

再来看下完整的获取节点(Hash表中元素用节点存储)的方法
在这里插入图片描述
使用的是hashcode值和equals方法,前面我们知道Integer类的hashcode值和equals方法都使用value值得到,显然它们是相等的。

HashMap的contains方法和get方法同HashSet,TreeMap的contains的这两个方法回用到compareTo,Integer方法的compareTo方法同样用value值进行比较。

TreeMap中get方法调用方法:
在这里插入图片描述

综上Integer类在集合中的操作都是用其value值进行运算,因此在集合中,可以把int和Integer等同看待。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值