java之关于Collection的注意点

1.这是一个javabean,重写了equals方法,可以比较对象的值而不是java自带的定义比较对象的地址。java之关于Collection的注意点_第1张图片
2.第一java之关于Collection的注意点_第2张图片

输出结果:
java之关于Collection的注意点_第3张图片
3.第二
java之关于Collection的注意点_第4张图片

输出结果:
在这里插入图片描述
从这个结果看的话,不妨有几个问题。
1.为什么remove(m2)得到的size大小是0.
2.为什么第二个例子是2
3.如果更比较基础的是为什么重写equals方法?
1.1.为什么remove(m2)得到的size大小是0.?
答:因为我们重写了eqeuls对象,然后重点让size为0 的并不是大家下意识的想是不是对象又出了新的譬如常量池的东西,其实并不是。Collection 里的remve方法是去调用你所要进行操作的元素进行对集合内的元素进行equals比较大小。如果存在相等的值,那么你所删除的数就会将集合中存在的给删除掉。其实想法深刻一点和常量池的思想其实很像但是它不是哦。
2.2.为什么第二个例子是2
答:因为我们定义的Collection的多态调用的是子集xxxList的引用,所以我们可以将数值相等的值插入在同一个集合中,即当我们add时是可通过的,即集合创建了一个和上一个数相同的指针。那我们在remove时,这个时候我们同样的是对比,但是当我们加入这个集合时它就以指针数组存在其中,那么remove就会直接删除掉,不会再去比较。
简单的去理解吧,如果你没有add那么remove对比集合中存不存在,存在就删掉。如果你add了,remove掉的只有你add的这个数即使有和这个数相等的也不管。
3.3.3.如果更比较基础的是为什么重写equals方法?
equals方法是SUN公司提供给我们的方法,但是这个方法仅仅是提供去比较对象的地址是否相等,这对于我们程序员来说是比较鸡肋的,所以我们几乎都不会用,但是呢,因为有了这个方法,也比较好记操作起来也比较顺手,那么我们就按着这个SUN公司给起的比较大小的名字,重写这个方法。
注:包装类(自动装箱拆箱)和String的常量池又是和上述的有些些许的不同,如果有感兴趣的朋友可以去了解一下。
java之关于Collection的注意点_第5张图片

你可能感兴趣的:(java之关于Collection的注意点)