集合框架原始碼分析 抽象類

2021-06-09 02:19:57 字數 1905 閱讀 1407

public abstract class abstractcollectionimplements collection

// query operations

/***

* 返回集合中元素的迭代器

*/public abstract iteratoriterator();

public abstract int size();

public boolean isempty()

public boolean contains(object o) else

return false;

}/**

* 此方法是同步的,即使在遍歷集合的過程中發現集合已經改變,任然可以返回

* 正確的結果

** 此方法等同於:

** listlist = new arraylist(size());

* for (e e : this)

*     list.add(e);

* return list.toarray();

*/public object toarray()

//如果遍歷完後發現集合還有更多的元素,即在遍歷時有元素被新增進集合,呼叫

//finishtoarray方法新增剩餘的元素

return it.hasnext() ? finishtoarray(r, it) : r;

}public t toarray(t a)

r[i] = (t)it.next();

}return it.hasnext() ? finishtoarray(r, it) : r;

}/**

* 當it還有更多的元素,重新分配陣列。並把剩餘元素新增進陣列

*/private static t finishtoarray(t r, iterator<?> it)

r = arrays.copyof(r, newcap); //新建乙個長度為newcap的陣列,並把r中資料存入

}r[i++] = (t) it.next();   //新增集合剩餘元素到新陣列

}// 修剪多餘的長度

return (i == r.length) ? r : arrays.copyof(r, i);

}// modification operations

/*** 呼叫此方法總是丟擲乙個異常,需要子類去重寫此方法

*/public boolean add(e e)

/*** 此方法會首先在集合中查詢指定元素o,如果找到就移除它

* 移除的是第乙個找到的匹配的值

*/public boolean remove(object o)

}} else

}}return false;

}// bulk operations

public boolean containsall(collection<?> c)

/*** 此方法將丟擲乙個unsupportedoperationexception,除非子類重寫了add方法

*/public boolean addall(collection<? extends e> c)

return modified;

}public boolean removeall(collection<?> c)

}return modified;

}public boolean retainall(collection<?> c)

}return modified;

}public void clear()

}//  string conversion

/*** 重寫tostring方法,返回格式:[e.tostring, e2.tostring, ...]

* */

public string tostring() }}

原始碼分析集合Hashmap

public v put k key,v value final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 如果鍊錶中有相同的key直接跳出迴圈 if e.hash hash k e.key key key ...

Map集合 原始碼分析

map的實現類的結構 map 雙列資料,儲存key value對的資料 hashmap 作為map的主要實現類 執行緒不安全的,效率高 可以儲存null和key的value hashmap的底層 陣列 鍊錶 jdk7之前 陣列 鍊錶 紅黑樹 jdk8 linkedhashmap 保證在遍歷map元素...

Java類集框架 HashMap原始碼分析

hashmap是基於map的鍵值對對映表,底層是通過陣列 鍊錶 紅黑樹 jdk1.8加入 來實現的。hashmap結構 hashmap中儲存元素,是將key和value封裝成了乙個node,先以乙個node陣列的來儲存,通過key的hashcode來計算hash值,根據hash值和hashmap的大...