1. 程式人生 > >java集合類List/Set/Map的區別和聯絡

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

Java所有“儲存及隨機訪問一連串物件”的做法,array是最有效率的一種。

1、效率高,但容量固定且無法動態改變。
      array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。

2、Java中有一個Arrays類,專門用來操作array
      arrays中擁有一組static函式,
      equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。
      fill():將值填入array中。
      sort():用來對array進行排序。
      binarySearch():在排好序的array中尋找元素。
      System.arraycopy():array的複製。


二、Collection ,Map

      若撰寫程式時不知道究竟需要多少物件,需要在空間不足時自動擴增容量,則需要使用容器類庫,array不適用。

1、Collection 和 Map 的區別

      容器內每個為之所儲存的元素個數不同。
      Collection型別者,每個位置只有一個元素。
      Map型別者,持有 key-value pair,像個小型資料庫。

2、各自旗下的子類關係

Collection
      --List:將以特定次序儲存元素。所以取出來的順序可能和放入順序不同。
             --ArrayList / LinkedList / Vector

      --Set : 不能含有重複的元素
            --HashSet / TreeSet
Map
      --HashMap
      --HashTable
      --TreeMap

3、其他特徵

      List,Set,Map將持有物件一律視為Object型別。
      Collection、List、Set、Map都是介面,不能例項化。
      繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些才可被例項化。
      vector容器確切知道它所持有的物件隸屬什麼型別。vector不進行邊界檢查。


三、Collections

Collections是針對集合類的一個幫助類。提供了一系列靜態方法實現對各種集合的搜尋、排序、執行緒完全化等操作。
      相當於對Array進行類似操作的類——Arrays。
      如:Collections.max(Collection coll); 取coll中最大的元素。
             Collections.sort(List list); 對list中元素排序。

四、如何選擇?

1、容器類和Array的區別、擇取
      容器類僅能持有物件引用(指向物件的指標),而不是將物件資訊copy一份至數列某位置。
      一旦將物件置入容器內,便損失了該物件的型別資訊。

2、
      在各種Lists中,最好的做法是以ArrayList作為預設選擇。當插入、刪除頻繁時,使用LinkedList();
       Vector總是比ArrayList慢,所以要儘量避免使用。
      在各種Sets中,HashSet通常優於HashTree(插入、查詢)。只有當需要產生一個經過排序的序列,才用TreeSet。
      HashTree存在的唯一理由:能夠維護其內元素的排序狀態。
      在各種Maps中:HashMap用於快速查詢;當元素個數固定,用Array,因為Array效率是最高的。

結論:最常用的是ArrayList,HashSet,HashMap,Array。


注意:

1、Collection沒有get()方法來取得某個元素。只能通過iterator()遍歷元素。
2、Set和Collection擁有一模一樣的介面。
3、List可以通過get()方法來一次取出一個元素。使用數字來選擇一堆物件中的一個,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList構造堆疊stack、佇列queue

5、Map用 put(k,v) / get(k),還可以使用containsKey()/containsValue()來檢查其中是否含有某個key/value。
HashMap會利用物件的hashCode來快速找到key。
hashing:雜湊碼就是將物件的資訊經過一些轉變形成一個獨一無二的int值,這個值儲存在一個array中。
我們都知道所有儲存結構中,array查詢速度是最快的。所以,可以加速查詢。
      
發生碰撞時,讓array指向多個values。即,陣列每個位置上又生成一個槤表。

6、Map中元素,可以將key序列、value序列單獨抽取出來。
使用keySet()抽取key序列,將map中的所有keys生成一個Set。
使用values()抽取value序列,將map中的所有values生成一個Collection。

為什麼一個生成Set,一個生成Collection?那是因為,key總是獨一無二的,value允許重複。

相關推薦

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

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

Java集合 List Set Map

set map 集合 java集合類 索引 擁有 對象 ava 重復 排序 1.List(有序、可重復) (1)List裏存放的對象是有序的,而且可以重復。 (2)List關註的是索引,擁有一系列索引相關的方法。 (3)往其中插入或刪除數據時,後面的數據會移動。 2.S

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

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

Java中的集合(List,Set.Map)

1.List 1.1 Arraylist 與 LinkedList 區別 是否保證執行緒安全: ArrayList 和

Java集合框架List+Set+Map基本操作

一、List集合  List的特徵是其元素以線性方式儲存,集合中可以存放重複物件。  List介面主要實現類包括:   ArrayList : 代表長度可以改變得陣列。可以對元素進行隨機的訪問,向

java集合list,set,map)

集合中介面和類的關係 Collection介面是集合類的根介面,Java中沒有提供這個介面的直接的實現類。但是卻讓其被繼承產生了兩個介面,就是Set和List。Set中不能包含重複的元素。List是一個有序的集合,可以包含重複的元素,提供了按索引訪問的方式。 Map是Ja

Java集合ListSet、Queue、Map實現

1.Collection    Collection最基本的集合介面,一個Collection代表一組Object的集合public interface Collection<E> extends Iterable<E> {任何實現Collection

Java集合根介面:Collection Map

前言 在前文中我們瞭解了幾種常見的資料結構,這些資料結構有著各自的應用場景,並且被廣泛的應用於程式語言中,其中,Java中的集合類就是基於這些資料結構為基礎。 Java的集合類是一些非常實用的工具類,主要用於儲存和裝載資料 (包括物件),因此,Java的集合類也被成為容器。在Java中,所有的集合類都位於

Java集合總結(ListMapSet)

集合的引入  當我們有種需求,需要儲存多個元素的結構時,我們前面講過陣列,陣列可以儲存。但是陣列也有它的弊端,使用的時候,必須先定義好長度,也就是陣列的長度是固定,不能根據我們的需求自動變長或者變短。 我們看一個例項:先定義一個Student類: 1 public class Stud

Java集合List,Set以及Map集合體系詳解(史上最全)

概述: List , Set, Map都是介面,前兩個繼承至Collection介面,Map為獨立介面 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Ha

Java集合框架ListMapSet, Queue介紹

Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組介面,類的體系結構。 Collection介面     Collection是最基本的集合介面,一個Collection代表一組Object的集合,這些Objec

Java裏的集合List/Set/Map

的區別 hashmap 都是 lan 返回 紅黑樹 sdn 裏的 鏈表 首先對List/Set/Map進行說明: 1. 三者都是接口, List和Set繼承至Collection接口,Map為獨立的接口 2. List是無序的、Set是有序的。Map中既有有序的實現類也

Java集合List,Set以及Map集合體系簡述

概述: List , Set, Map都是介面,前兩個繼承至collection介面,Map為獨立介面 Set下有HashSet,

list set map區別及適用場景

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

面試3-java集合總結(Map

value val tree bubuko 實現 ble info 集合 dha 1.概述: Java 中的map集合使用鍵值對(key-value)來保持數據,其中值(value)可以重復,鍵(key)必須唯一,但最多只能有一個key為空,它的主要實現類有HashMap

Java集合中不實現CloneableSerializable原因

tran style 能夠 uid sta 工具 數據 類型 size  Java集合類中不實現Cloneable和Serializable原因      莫名的被問這麽一個問題,也答不上,記錄記錄,為何Java集合類不實現Cloneable和Serializable接口。

Collection.max min最大最小值 集合list set map

//list 用來待儲存檔案表中檔案id List<Integer> list=new ArrayList<>(); //file

高併發下的Java資料結構(List,Set,Map,Queue)

由於並行程式與序列程式的不同特點,適用於序列程式的一些資料結構可能無法直接在併發環境下正常工作,這是因為這些資料結構不是執行緒安全的。本節將著重介紹一些可以用於多執行緒環境的資料結構,如併發List、併發Set、併發Map等。 1.併發List Vector 或者 CopyOnWriteArrayList 是

Collection List Set Map 區別記憶

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

Java集合ListSetMap區別,ArrayListLinkedList有何區別..........

一、陣列和集合的區別:   陣列是大小固定的,並且同一個陣列只能存放型別一樣的資料(基本型別/引用型別);   集合可以儲存和操作數目不固定的一組資料。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用型別的的資料,不能存放基本資料型別。   陣列和集合相比唯一的有點就是速度