容器(容器中只能存放物件)

2021-06-06 19:56:10 字數 1090 閱讀 2868

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存指...