學習隨筆 集合

2021-10-05 12:00:32 字數 3372 閱讀 6237

collection介面下有list,set,queue佇列介面。

map下有hashmap,hashtable,treemap。

list的實現類有arraylist,linkedlist,vector(執行緒安全)。

set的實現類有hashset,treeset,hashlinkedset。

map的實現類有hashtable,hashmap,treemap…

注意:queue介面與list、set同一級別,都是繼承了collection介面。

看圖你會發現,linkedlist既可以實現queue介面,也可以實現list介面.只不過呢, linkedlist實現了queue介面。queue介面窄化了對linkedlist的方法的訪問許可權(即在方法中的引數型別如果是queue時,就完全只能訪問queue介面所定義的方法 了,而不能直接訪問 linkedlist的非queue的方法),以使得只有恰當的方法才可以使用。

sortedset是個介面,它裡面的(只有treeset這乙個實現可用)中的元素一定是有序的。

list:

arraylist底層是陣列。用下標定位資料。所以查詢速度快,但是增加刪除效率很慢。增刪的原理是對底層的陣列進行擴容copy。預設size=10。之後增加的陣列長度是10/2+10=15。在頻繁查詢以及尾部的插入與刪除場景下使用arraylist。

例:在乙個長度為10的陣列中在下標是4的位置新增乙個元素。

把當前index=4之後的資料拿出來copy到index=5之後,index=4的位置就空出來了,然後再進行插入。效率很低。

刪除同理,把要刪除的下標之後的資料copy到要刪除的下標的位置。

linkedlist是乙個鍊錶結構。查詢效率低,增刪效率高。

頻繁在任意位置進行元素插入與刪除使用linkedlist。

vector當產生物件時就初始化內部陣列(預設大小為10),當增量為0時,擴容為原先陣列2倍,當增量大於0是擴充為原來的大小+增量採用synchronized同步方法,執行緒安全,效能很低(讀讀互斥)。

list總結:

1,有序。

2,可重複。

(底層資料結構)

主要方法:

boolean add(e o) 向列表的尾部追加指定的元素

void add(int index,e element) 在列表的指定位置插入指定元素。

boolean addall(collection extends e> c) 追加指定 collection中的所有元素到此列表的結尾,順序是指定collection的迭代器返回這些元素的順序。

boolean addall(int index,collection extends e> c) 將指定collection中的所有元素都插入到列表中的指定位置。

void clear() 從列表中移除所有元素。

boolean contains(object o) 如果列表包含指定的元素,則返回true。

boolean containsall(collection> c) 如果列表包含指定collection的所有元素,則返回true。

boolean equals(object c) 比較指定的物件與列表是否相等。

e get(int index) 返回列表中指定位置的元素。

int hashcode() 返回列表的雜湊碼值。

int indexof(object o) 返回列表中首次出現指定元素的索引,如果列表不包含此元素,則返回-1。

boolean isempty() 判斷集合是否為空 如果為空 則返回true,否則返回false

iterator iterator() 返回以正確順序在列表的元素上進行迭代的迭代器。

int lastindexof(object o) 返回列表中最後出現指定元素的索引,如果列表不包含此元素,則返回-1。

listiterator listiterator() 返回列表中元素的列表迭代器(以正確的順序)。

listiterator listiterator(int index)返回列表中元素的列表迭代器(以正確的順序),從列表的指定位置開始。

e remove(int index) 移除列表中指定位置的元素。

boolean remove(object o) 移除列表**現的首個指定元素。

boolean removeall(collection> c) 從列表中移除指定collection中包含的所有元素。

boolean retainall(collection> c)僅在列表中保留指定collection中所包含的元素。

e set(int index,e element) 用指定元素替換列表中指定位置的元素。

int size() 返回列表中的元素數。

list sublist(int forindex,int toindex) 返回列表中指定的formindex(包括) 和toindex(不包括)之間的部分檢視。

object toarray() 返回以正確順序包含列表中的所有元素的陣列。

set:

特點:無序,不可重複。

1)hashset:

原理:底層是hash表。h(key) 用key來確定某個元素的位置。index=h(key)

保證元素唯一性的方法:hashcode() equals()

不能進行排序。

2)linkedhashset

底層資料結構是鍊錶和雜湊表。(fifo插入有序,唯一)

1.由鍊錶保證元素有序

2.由雜湊表保證元素唯一

3)treeset

底層資料結構是紅黑樹。(唯一,有序)

如何保證元素排序的呢?

自然排序

比較器排序

如何保證元素唯一性的呢?

根據比較的返回值是否是0來決定。

map介面有三個比較重要的實現類,分別是hashmap、treemap和hashtable。

treemap是有序的,hashmap和hashtable是無序的。

hashtable的方法是同步的,hashmap的方法不是同步的。這是兩者最主要的區別。

hashtable是執行緒安全的,hashmap不是執行緒安全的。

hashmap效率較高,hashtable效率較低。

如果對同步性或與遺留**的相容性沒有任何要求,建議使用hashmap。 檢視hashtable的源**就可以發現,除建構函式外,hashtable的所有 public 方法宣告中都有 synchronized關鍵字,而hashmap的原始碼中則沒有。

hashtable不允許null值,hashmap允許null值(key和value都允許)

父類不同:hashtable的父類是dictionary,hashmap的父類是abstractmap

Hail Hydra2 beta衝刺隨筆集合

一些註明 這個作業屬於哪個課程 2020春 s班 這個作業要求在 團隊作業第六次 beta衝刺 事後諸葛亮 這個作業的目標 beta衝刺置頂集合隨筆 作業正文 hail hydra2團隊作業第六次 beta衝刺 事後諸葛亮 其他參考文獻 alpha階段問題總結隨筆 凡事預則立隨筆 規範 beta衝刺...

Alpha衝刺隨筆集

第一天 alpha daily scrum meeting第一次 第二天 alpha daily scrum meeting第二次 第三天 alpha daily scrum meeting第三次 第四天 alpha daily scrum meeting第四次 第五天 alpha daily sc...

置頂集合隨筆

實驗室督勤管理系統 三隻松鼠 張星海 180320077 古越 180320075 朱巨集韜 180320079 專案alpha衝刺 day12 專案alpha衝刺 day11 專案alpha衝刺 day10 專案alpha衝刺 day9 專案alpha衝刺 day8 專案alpha衝刺 day7 ...