arraylist
本質是object陣列
private transient object elementdata
預設陣列的長度為10
add時超過10則陣列長度增加原來長度的一半
list變陣列:(t)list.toarray(newt[list.size()]);
linkedlist
本質是雙向的鍊錶
private static class node{
e item;
nodenext;
nodeprev;
add是new node 節點,然後關聯起來
hashset
本質是hashmap
private transient hashmapmap ;
add時用key來存值,value為乙個object物件
可以用來做隨機**的容器
sortedset
treeset
本質是 treemap
構造時可以加入comparator 引數,自定義定義排序規則
add時用key來存值,value為乙個object物件
本質是entry陣列和單向鍊錶的結合
transient entry table
static entry implementsmap.entry{
final k key;
v value;
entrynext;
final int hash;
預設陣列長度為16
增加容量時2倍增加
put元素時,會先對比hash值和equals內容。判斷鍵值是否相等。
如圖:
可以用來做統計文字出現次數的容器
treemap將物件放到集合(set、map)時會涉及對比hashcode的情況。如果不重寫呼叫的hashcode方法則會呼叫object類的hashcode方法(物件的位址),這樣會造成內容相同的物件,在記憶體位址不同的情況下,會被存入set、map中。但是集合中要求物件中的內容不能重複的。這樣就矛盾了
SessionStorage如何存放物件
前後端分離模式下,很多時候需要用到window.sessionstorage物件 例如用到vuex的專案,重新整理頁面後state中的資料全部初始化,那麼就要再次傳送請求 或者使用者所在介面有vue router跳轉後的引數,那麼重新整理頁面後引數就不見了,請求無引數,恰好伺服器端未考慮該情況,那麼...
C 對存放物件的Vector容器按自定義字段排序
此處定義結構體或者類都一樣,都可以借助演算法庫,自己定義排序規則,然後使用sort方法,靈活變通 student.h ifndef student h define student h endif class student student.cpp include include student.h...
vector中存放物件和指標的區別
這裡先說出結論 vector中push back物件時,會呼叫物件的拷貝建構函式。而且在vector空間不足時,繼續push back,vector會將之前的所有物件都拷貝構造到一塊更大的空間裡。也就是說物件如果較大,那麼最好用vector儲存指標以減少呼叫拷貝構造 造成的消耗,如果vector存指...