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

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

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

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

new 一个Integer对象
集合类中泛型Integer与int的联系
equals方法
集合类中泛型Integer与int的联系
以上可以看出Integer的equals方法就是对值的比较。下面我们来看看集合类。

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

再来看下完整的获取节点(Hash表中元素用节点存储)的方法
集合类中泛型Integer与int的联系
使用的是hashcode值和equals方法,前面我们知道Integer类的hashcode值和equals方法都使用value值得到,显然它们是相等的。

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

TreeMap中get方法调用方法:
集合类中泛型Integer与int的联系

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