Javaのソースコード - AbstractSet

AbstractSet抽象クラスは、ブランチセットトップクラスのコレクションの一部である、それはAbstractCollection、道具セットのインタフェースを継承します。

  パブリック抽象クラスAbstractSet <E>拡張AbstractCollection <E>道具セット<E>

この抽象クラスは、抽象メソッドではない定義し、唯一の三つの方法(実装親クラス)。彼らは、ハッシュコード、のremoveAll対等でした。

1.指定されたコレクションのすべての要素を削除します

    パブリック ブールのremoveAll(コレクション<?> c){ 
        ; Objects.requireNonNull(C)
        ブール =改変falseに
 
        IF(サイズ()> c.size()){ //場合の数より多くの要素Cの現設定の組の指定された数より、コレクションをCと同じ要素の既存のセット取り除く
            ため(イテレータI = <?> c.iterator(); i.hasNext();)
                修飾 | = 削除(i.next())を; 
        } {     //そうでなければ、現在数が少ないコレクション要素、Cの同じセットトラバース収集C組の指定された数よりも、既存の要素削除する
            ため(イテレータI = <?> イテレータ()を; i.hasNext()){
                 IF (Cします。 )(i.next())が含ま{ 
                    i.remove()。
                    修正 = ; 
                } 
            } 
        } 
        リターン変性; 
    }

equalsメソッドをオーバーライドします。2.

パブリック ブールのequals(オブジェクトO){
         IF(O == この// trueに同じオブジェクトを返す
            リターン をtrueに
 
        IF((O!instanceofのセット))// falseに設定されていません戻って
            リターン をfalseに
        コレクション C =(コレクション<?> <?> )O;
         のiF!(c.size()=サイズ())     // サンプルサイズが戻るfalseに
            復帰 falseに試してみる{
             リターンのcontainsAll(C);     // 比較するオブジェクトのコレクションがあって、現在のセットが含まれていますトゥーレはfalseに戻ります戻りが含まれていません 
        }キャッチ(ClassCastExceptionが未使用){
             戻り 
        } キャッチ(NullPointerExceptionが未使用){
             戻り 
        } 
    }

hashCodeメソッドをオーバーライドします3.

public int hashCode() {
        int h = 0;                    //它的hashCode算法是把所有的元素的hashCode值相加 返回
        Iterator<E> i = iterator();
        while (i.hasNext()) {
            E obj = i.next();        
            if (obj != null)
                h += obj.hashCode();
        }
        return h;
    }

总结
  其实关于abstratSet抽象类、还有这些集合的接口啊,没有什么可以叙述的,具体为什么这么设计,说白了就是面向对象设计,OOD,用面向对象的思维来看待JDK中的源码,设计无非就是使用 抽象、 封装、 继承、 多态这四个特性去做事情,我们学习的23种java设计模式也无非就是抽象封装继承多态这四个特性的实现方式。

  我们把整个集合的框架用接口和抽象类分出层次,一方面是便于开发和理解。另一方面也便于我们扩展自己想要实现的东西,也避免了我们去实现一些不必要的东西。

おすすめ

転載: www.cnblogs.com/FondWang/p/11921538.html