1. 程式人生 > >List,Set,Map用法以及區別

List,Set,Map用法以及區別

List,Set,Map是否繼承自Collection介面? 
答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接繼承自Collection的類,Java JDK提供的類都是繼承自Collection的"子介面",如:List和Set。 
注意:Map沒有繼承Collection介面,Map提供key到value的對映。一個Map中不能包含相同key,每個key只能對映一個value。Map介面提供3種集合的檢視,Map的內容可以被當做一組key集合,一組value集合,或者一組key-value對映。 

List按物件進入的順序儲存物件,不做排序或編輯操作。Set對每個物件只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於Set,而不關心它的順序--否則應該使用List)。Map同樣對每個元素儲存一份,但這是基於"鍵"的,Map也有內建的排序,因而不關心元素新增的順序。如果新增元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap.

詳細介紹: 
List特點:元素有放入順序,元素可重複 
Map特點:元素按鍵值對儲存,無放入順序 
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) 


List介面有三個實現類:LinkedList,ArrayList,Vector 
LinkedList:底層基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。連結串列增刪快,查詢慢 
ArrayList和Vector的區別:ArrayList是非執行緒安全的,效率高;Vector是基於執行緒安全的,效率低 
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet 
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現) 
Query介面有一個實現類:LinkList 
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap 

  HashMap非執行緒安全,高效,支援null;HashTable執行緒安全,低效,不支援null 
SortedMap有一個實現類:TreeMap 
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,儲存的是鍵值對 
set 一般無序不重複.map kv 結構 list 有序 。

List的功能方法

  實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。

  List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這隻推薦LinkedList使用。)一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。

  ArrayList : 由陣列實現的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。ListIterator只應該用來由後向前遍歷ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。

  LinkedList : 對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何介面或基類中定義過)使得LinkedList可以當作堆疊、佇列和雙向佇列使用。

  Set的功能方法

  Set具有與Collection完全一樣的介面,因此沒有任何額外的功能,不像前面有兩個不同的List。實際上Set就是Collection,只是行為不同。(這是繼承與多型思想的典型應用:表現不同的行為。)Set不儲存重複的元素(至於如何判斷元素相同則較為負責)

  Set : 存入Set的每個元素都必須是唯一的,因為Set不儲存重複元素。加入Set的元素必須定義equals()方法以確保物件的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序。

  HashSet : 為快速查詢設計的Set。存入HashSet的物件必須定義hashCode()。

  TreeSet : 儲存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。

  LinkedHashSet : 具有HashSet的查詢速度,且內部使用連結串列維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。

  Map的功能方法

  方法put(Object key, Object value)新增一個“值”(想要得東西)和與“值”相關聯的“鍵”(key)(使用它來查詢)。方法get(Object key)返回與給定“鍵”相關聯的“值”。可以用containsKey()和containsValue()測試Map中是否包含某個“鍵”或“值”。標準的Java類庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有同樣的基本介面Map,但是行為、效率、排序策略、儲存物件的生命週期和判定“鍵”等價的策略等各不相同。

  執行效率是Map的一個大問題。看看get()要做哪些事,就會明白為什麼在ArrayList中搜索“鍵”是相當慢的。而這正是HashMap提高速度的地方。HashMap使用了特殊的值,稱為“雜湊碼”(hash code),來取代對鍵的緩慢搜尋。“雜湊碼”是“相對唯一”用以代表物件的int值,它是通過將該物件的某些資訊進行轉換而生成的。所有Java物件都能產生雜湊碼,因為hashCode()是定義在基類Object中的方法。

  HashMap就是使用物件的hashCode()進行快速查詢的。此方法能夠顯著提高效能。

  Map : 維護“鍵值對”的關聯性,使你可以通過“鍵”查詢“值”

  HashMap : Map基於散列表的實現。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設定容量capacity和負載因子load factor,以調整容器的效能。

  LinkedHashMap : 類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用連結串列維護內部次序。

  TreeMap : 基於紅黑樹資料結構的實現。檢視“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

  WeakHashMao : 弱鍵(weak key)Map,Map中使用的物件也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個“鍵”,則此“鍵”可以被垃圾收集器回收。

  IdentifyHashMap : 使用==代替equals()對“鍵”作比較的hash map。專為解決特殊問題而設計。


相關推薦

List,Set,Map用法以及區別

List,Set,Map是否繼承自Collection介面? 答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一些能

list/set/map三者的區別?

1.面試題:你說說collection裡面有什麼子類。(其實面試的時候聽到這個問題的時候,你要知道,面試官是想考察List,Set)正如圖一,list和set是實現了collection介面的。(圖二)List:1.可以允許重複的物件。    2.可以插入多個null元素。 

java list set map 集合的區別

容器 sortedset 允許 sort 子接口 因此 實現類 索引 存儲 List:1.可以允許重復的對象。    2.可以插入多個null元素。 3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。 4.常用的

list , set ,map 三者的用法以及區別

首先,講一下list和set之間的相似性,list和set都是單列集合,他們有一個共同的父介面---collection。list是依次列出一個結合中的所有的元素,若集合中有重複的,同樣列出,有序;set列出的集合中是不允許有重複的,也就是說裡面有一個A物件和一個B物件,若

List Set Map以及子介面用法總結

Collection ├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap └WeakHashMap list 和set 有共同的父類Collection  它們的用法也是一樣的 唯

ist , set ,map 三者的用法以及區別

首先,講一下list和set之間的相似性,list和set都是單列集合,他們有一個共同的父介面---collection。list是依次列出一個結合中的所有的元素,若集合中有重複的,同樣列出,有序;set列出的集合中是不允許有重複的,也就是說裡面有一個A物件和一個B物件,若是

集合類List,set,Map 的遍歷方法,用法區別

看到一篇好文章,直接拿下了。。。當然,如果你目前只和我一樣更注重它的用法,只看如何遍歷就可以了。 遍歷list: 方法一: for(String s:lists){System.out.println(s); } 方法二: System.out.println(

Collection,ListSetMap用法區別

Collection , List , Set 和 Map 用法和區別 作者: zccst Java spring MVC 框架的呼叫關係是弄明白了,可是發現後面要走的路還很長,有很多東西對我還是很神祕,比如 list , set , map 等,

list set map區別及適用場景

trees itl 重寫 定義 size 需要 nds sync 功能 list與Set、Map區別及適用場景 1、List,Set都是繼承自Collection接口,Map則不是 2、List特點:元素有放入順序,元素可重復 ,Set特點:元素無放入順序,元素不可重

List Set Map區別

List和Set是單列結合,它們的父類是Collection,Map是雙列結合,Map用於儲存的是鍵值對,key不允許重複。 List允許重複元素,而Set不允許重複元素。 List以特定次序來持有元素,有先後順序,加入的物件就像排隊一樣,先來後到的順序,有時候也可以插隊,即呼叫add(in

ListSet,map有什麼區別List,Set, Map是否繼承自Collection介面?

List: 1.可以允許重複的物件。 2.可以插入多個null元素。 3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。 4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問,而 L

Collection List Set Map 區別記憶

List介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似陣列的形式進行儲存,因此它的隨機訪問速度極快,而LinkedList的內部實現是連結串

Java集合類: SetListMap、Queue區別及應用

Java集合類基本概念 在程式設計中,常常需要集中存放多個數據。從傳統意義上講,陣列是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要儲存的物件的數量。一旦在陣列初始化時指定了這個陣列長度,這個陣列長度就是不可變的,如果我們需要儲存一個可以動態增長

List/Set/Map詳解及其區別和他們分別適用的場景

    Java中的集合包括三大類,它們是Set(集)、List(列表)和Map(對映),它們都處於java.util包中,Set、List和Map都是介面,它們有各自的實現類。Set的實現類主要有

Java中的ListMap有什麼區別List, Set, Map是否繼承自Collection介面?

List,Set,Map是否繼承自Collection介面?  答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一

集合類(Collection) List/Set/Map... 的區別和聯絡

Collection:List、Set Map:HashMap、HashTable 如何在它們之間選擇 一、Array , Arrays Java所有“儲存及隨機訪問一連串物件”的做法,array是最有效率的一種。 1、效率高,但容量固定且無法動態改變。 array還

Java中Map, List, Set和Queue的區別和使用場景

1. Java集合類基本概念 在程式設計中,常常需要集中存放多個數據。從傳統意義上講,陣列是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要儲存的物件的數量。一旦在陣列初始化時指定了這個陣列長度,這個陣列長度就是不可變的,如果我們需要儲存一個可以動態增長的資

list set map的特點及區別

List,Set,Map是否繼承自Collection介面? 答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一些能

java集合類List/Set/Map區別和聯絡

Java所有“儲存及隨機訪問一連串物件”的做法,array是最有效率的一種。 1、效率高,但容量固定且無法動態改變。       array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。 2、Java中有一個Arrays類,專門用來操作array。      

List,Set,Map的聯絡和區別

要說清楚list,set,map的區別,大家先看一下這段話,我覺得相當有趣,當然這是別人的話,這裡引用一下。 世間上本來沒有集合,(只有陣列參考C語言)但有人想要,所以有了集合 有人想有可以自動擴充套件的陣列,所以有了List 有的人想有沒有