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设计模式也无非就是抽象封装继承多态这四个特性的实现方式。
我们把整个集合的框架用接口和抽象类分出层次,一方面是便于开发和理解。另一方面也便于我们扩展自己想要实现的东西,也避免了我们去实现一些不必要的东西。