java.util.AbstractCollection
感謝BBS上的outerheaven解答了add(E o)方法的問題。在把add方法寫成拋出異常不是為了防止子類向上轉型時錯誤地調用AbstractCollection的這個方法,而是為了讓不支持add方法的子類繼承,比如EnumSet類,它的元素是在創建時就決定的,不支持add方法。
java.util.AbstractList
1) 包含了
private class Itr implements Iterator<E>
private class ListItr extends Itr implements ListIterator<E>
而ListIterator又是繼承Iterator接口的。
分成兩個類寫是不是為了使代碼清晰呢?
2) 使用了modCount變量檢查并發操作時容易發生的問題。
Iterator中有一個expectedModCount變量,每次通過Iterator操作時,都會調用checkForComodification()方法,檢查expectedModCount是否和AbstractList的modCount相等,如果不同則拋出ConcurrentModificationException。
3) subList方法和SubList類和視圖view有關(是不是Observer模式的應用呢?),先不看了
4) equals方法中最后那個判斷語句有點新穎(或者我土了)
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;

ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
}
5) hashCode的生成:
hashCode(e1, e2, ..., en) = Sigma(hashCode(ei) * 32^i)
沒有考慮溢出之類的情況,因為只是個hashCode嘛
感謝BBS上的outerheaven解答了add(E o)方法的問題。在把add方法寫成拋出異常不是為了防止子類向上轉型時錯誤地調用AbstractCollection的這個方法,而是為了讓不支持add方法的子類繼承,比如EnumSet類,它的元素是在創建時就決定的,不支持add方法。
java.util.AbstractList
1) 包含了
private class Itr implements Iterator<E>
private class ListItr extends Itr implements ListIterator<E>
而ListIterator又是繼承Iterator接口的。
分成兩個類寫是不是為了使代碼清晰呢?
2) 使用了modCount變量檢查并發操作時容易發生的問題。
Iterator中有一個expectedModCount變量,每次通過Iterator操作時,都會調用checkForComodification()方法,檢查expectedModCount是否和AbstractList的modCount相等,如果不同則拋出ConcurrentModificationException。
3) subList方法和SubList類和視圖view有關(是不是Observer模式的應用呢?),先不看了
4) equals方法中最后那個判斷語句有點新穎(或者我土了)

















5) hashCode的生成:
hashCode(e1, e2, ..., en) = Sigma(hashCode(ei) * 32^i)
沒有考慮溢出之類的情況,因為只是個hashCode嘛