Collection源代码笔记

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

你可能感兴趣的:(Collection)