1, retainALL: 这个方法其实就是取两个集合的交集。
RemoveALL:这个方式是Src集合中去除相同的元素
2 各个实现类:
AbstractCollection(java.utils)
checkedCollection(java.utils.Collections)
synchroizedCollection(java.utils.Collections)
UnmodifiableCollection(java.utils.Collections)
接口
beanContext(java.beans.beanContext)
List
Queue
Set
AbstractCollection:
1 contain方法:会判断参数是否为Null。如果为Null,判断Collection里面是否有null,有则返回True。然后循环找寻到相同的值。
在这里,分开两次,我觉得是为了避免Null的存在,因为判断相等用了equal的方法。在参数为Null时,判断的element ==null。否则用的是参数的equal方法。如果不加这个判断。可能在循环时产生NullPointerException的问题吧。
注意参数或者在循环的时候Null的可能性。
2 toArray方法,这两行代码,考虑了
for (int i = 0; i < r.length; i++) { if (! it.hasNext()) // fewer elements than expected
和
it.hasNext() ? finishToArray(r, it) : r;
由于在调用toArray方法时。其他线程调用Collection的方法,使得size改变。而产生的错误。
3 反射获得数组的代码
(T[])java.lang.reflect.Array .newInstance(a.getClass().getComponentType(), size);
4,循环的时候,多用Iterator
checkedCollection
1,其实用泛型,可能更能解决这个问题
2, 没有什么特别,就是加入了一个type check,个人觉得有了泛型之后,很鸡肋。而且注释中说,性能不及泛型。
SynchronizedCollection:
1, 其Locker默认是本身。但是可以是外部的Object的。可以通过构造函数传入。
UnModifiableCollection
没有什么特别,就是在改变的Collection元素的方法,都会抛出Excepiton