posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          JDK1.5 源碼閱讀筆記 (2)

          Posted on 2007-05-04 13:11 ZelluX 閱讀(935) 評(píng)論(0)  編輯  收藏 所屬分類: OOP
          java.util.AbstractCollection
          感謝BBS上的outerheaven解答了add(E o)方法的問題。在把a(bǔ)dd方法寫成拋出異常不是為了防止子類向上轉(zhuǎn)型時(shí)錯(cuò)誤地調(diào)用AbstractCollection的這個(gè)方法,而是為了讓不支持add方法的子類繼承,比如EnumSet類,它的元素是在創(chuàng)建時(shí)就決定的,不支持add方法。

          java.util.AbstractList
          1) 包含了
          private class Itr implements Iterator<E>
          private class ListItr extends Itr implements ListIterator<E>
          而ListIterator又是繼承Iterator接口的。
          分成兩個(gè)類寫是不是為了使代碼清晰呢?

          2) 使用了modCount變量檢查并發(fā)操作時(shí)容易發(fā)生的問題。
          Iterator中有一個(gè)expectedModCount變量,每次通過Iterator操作時(shí),都會(huì)調(diào)用checkForComodification()方法,檢查expectedModCount是否和AbstractList的modCount相等,如果不同則拋出ConcurrentModificationException。

          3) subList方法和SubList類和視圖view有關(guān)(是不是Observer模式的應(yīng)用呢?),先不看了

          4) equals方法中最后那個(gè)判斷語句有點(diǎn)新穎(或者我土了)
          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)
          沒有考慮溢出之類的情況,因?yàn)橹皇莻€(gè)hashCode嘛

          主站蜘蛛池模板: 新竹县| 延安市| 青冈县| 石狮市| 梅州市| 诸城市| 宁陵县| 黔东| 巫山县| 汉阴县| 丰城市| 汉源县| 堆龙德庆县| 孟州市| 资阳市| 囊谦县| 嘉兴市| 枣阳市| 湾仔区| 文化| 临武县| 南城县| 宁海县| 连南| 镇雄县| 耿马| 海盐县| 务川| 神农架林区| 游戏| 剑川县| 怀集县| 固阳县| 海原县| 毕节市| 容城县| 苏尼特右旗| 大荔县| 晋城| 赤壁市| 龙川县|