List與Set的關係和區別

2021-08-26 02:59:03 字數 1140 閱讀 2624

list和set是用來存放集合的介面,並且二者都繼承自介面collection。

1、在list中的元素存放是有序的,可以存放重複的元素,檢索效率較高,插入刪除效率較低。

arraylist、linkedlist、vector是list的兩個實現類。

arraylist:

底層的實現就是乙個可變陣列非同步實現,當陣列長度不夠用的時候就會重新開闢乙個新的陣列,然後將原來的資料拷貝到新的陣列內。由於這一底層實現,所以arraylist集合中元素儲存的位置是連續的,查詢起來效率比較高,插入刪除效率較低。

linkedlist:

底層實現是雙向迴圈鍊錶資料結構非同步實現,資料結構如下**

class node 

linklist中元素儲存位置是不連續的,插入刪除的執行效率高,查詢效率低。

vector:

vector作為list的另外乙個典型實現類,完全支援list的全部功能,vector類也封裝了乙個動態的,允許在分配的object陣列,vector是乙個比較古老的集合,jdk1.0就已經存在,建議盡量不要使用這個集合,vector與arraylist的主要是區別是,vector是執行緒安全的,但是效能比arraylist要低。

2、set沒有存放順序不能存放重複元素檢索效率較低,插入刪除效率較高,由於set集合儲存位置是由他的hashcode碼決定的,所以他的儲存物件必須有equals()方法,而且set遍歷只能用迭代,沒有下標。

hashset

底層由雜湊表(實際上是乙個hashmap例項)支援,不能保證元素的順序,元素是無序的,可以有null,但是null只能有乙個,不能有重複的元素。hashset不是同步的,需要外部保持執行緒之間的同步問題。

treeset:

treeset實現了sortedset介面,它是乙個有序的集合類,treeset的底層是通過treemap實現的。treeset並不是根據插入的順序來排序,而是根據實際的值的大小來排序。treeset也支援兩種排序方式:自然排序和自定義排序。不能放入重複元素和null。

Set和List 的關係與區別

兩個介面都是繼承自collection.list inteface 次序是list 的最重要特點,它確保維護元素特定的順序.arraylist 允許對元素快速隨機訪問.linkedlist 對順序訪問進行優化,向list 中間插入與移除的開銷並不大,具有addfrist addlast getfir...

Set和List 的關係與區別

兩個介面都是繼承自collection.list inteface 次序是list 的最重要特點,它確保維護元素特定的順序.arraylist 允許對元素快速隨機訪問.linkedlist 對順序訪問進行優化,向 list 中間插入與移除的開銷並不大,具有addfrist addlast getfi...

Set和List 的關係與區別

兩個介面都是繼承自collection.list inteface 次序是list 的最重要特點,它確保維護元素特定的順序.arraylist 允許對元素快速隨機訪問.linkedlist 對順序訪問進行優化,向 list 中間插入與移除的開銷並不大,具有addfrist addlast getfi...