java abstractset 继_java集合框架-AbstractSet
抽象set繼承了抽象集合,只是額外重寫了equal和hashCode方法 抽象set是set接口的擴展 public abstract class AbstractSet extends AbstractCollection implements Set { ? ? protected AbstractSet() { ? ? } 兩個set是否相等的比較方式,先比較引用是否相同,否則繼續比較大小是否一致,繼而對兩個集合中每個元素進行一一比較是否相等 ? ? public boolean equals(Object o) { ? ? ? ? if (o == this) ? ? ? ? ? ? return true; ? ? ? ? if (!(o instanceof Set)) ? ? ? ? ? ? return false; ? ? ? ? Collection c = (Collection) o; ? ? ? ? if (c.size() != size()) ? ? ? ? ? ? return false; ? ? ? ? try { ? ? ? ? ? ? return containsAll(c); ? ? ? ? } catch (ClassCastException unused)? ?{ ? ? ? ? ? ? return false; ? ? ? ? } catch (NullPointerException unused) { ? ? ? ? ? ? return false; ? ? ? ? } ? ? } 所有繼承了這個抽象set的類的hashCode計算方法: 是對set中每個元素的hashcode值進行累加 ? ? public int hashCode() { ? ? ? ? int h = 0; ? ? ? ? Iterator i = iterator(); ? ? ? ? while (i.hasNext()) { ? ? ? ? ? ? E obj = i.next(); ? ? ? ? ? ? if (obj != null) ? ? ? ? ? ? ? ? h += obj.hashCode(); ? ? ? ? } ? ? ? ? return h; ? ? } 如果當前的set大小大于傳入進來的set,那么用傳進來的參數作為遍歷因子在當前set中移除 否則以當前set的大小作為遍歷因子去做移除操作 也就是說,誰的大小比較小,就以誰為遍歷因子去另一個set中移除操作 ? ? public boolean removeAll(Collection> c) { ? ? ? ? boolean modified = false; ? ? ? ? if (size() > c.size()) { ? ? ? ? ? ? for (Iterator> i = c.iterator(); i.hasNext(); ) ? ? ? ? ? ? ? ? modified |= remove(i.next()); ? ? ? ? } else { ? ? ? ? ? ? for (Iterator> i = iterator(); i.hasNext(); ) { ? ? ? ? ? ? ? ? if (c.contains(i.next())) { ? ? ? ? ? ? ? ? ? ? i.remove(); ? ? ? ? ? ? ? ? ? ? modified = true; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return modified; ? ? } }
總結
以上是生活随笔為你收集整理的java abstractset 继_java集合框架-AbstractSet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日本50岁女性中27%无子女!发达国家中
- 下一篇: dibian+9+oracle+java