1. 程式人生 > >集合 List、Set、Map 的區別和實現原理

集合 List、Set、Map 的區別和實現原理

        Java中的集合包括三大類:
        它們是Set、List和Map,它們都處於java.util包中,Set、List和Map都是介面,它們有各自的實現類。
        Set的實現類主要有HashSet和TreeSet。
        List的實現類主要有ArrayList。
        Map的實現類主要有HashMap和TreeMap。


        一、L i s t

        共性:有序  可以重複

        List集合特徵:

        (1)允許重複元素新增

        (2)有序:放入的順序和取出的順序是一樣的

        1、ArrayList 

        (1)沒有執行緒安全,效能高

        (2)容量預設初始容量10,(可以賦初始值) 增長時,容量增加1/2

        容量擴充套件是按照 + 0.5倍擴充套件,就是原來集合長度一半

        比如《10+5》《15+7》《22+11》

        2、Vector   

        (1)具有執行緒安全,效能低  

        (2)容量預設初始容量為10,(可以賦初始值,增長容量) 增長時,容量加倍

        容量擴充套件是按照 + 1倍擴充套件,就是原來集合的長度 + 1倍

        比如:<10(原來集合長度)+10(擴充套件長度)>  <20+20>  <40+40>





        3、LinkedList  鏈條式集合 (雙向連結串列演算法)會有前置節點和後置節點

        找不同點

        ArrayList

        (1)演算法:簡單的陣列演算法

        (2)查詢:每個元素有固定的索引位置,查詢直接根據位置定位獲取,效能高

        (3)插入刪除:每次操作插入或者刪除,都會影響後面元素的索引位置,後面元素都要懂,效能低



        LinkedList

        (1)演算法:雙向連結串列式演算法

        (2)查詢:每次都要從開始往後依次查詢,效能低

        (3)插入刪除:每次操作插入刪除,只需要修改元素的後置節點引用,不需要後面元素移動位置,效能高

        二、Set集合

        1、HashSet

        集合有序無序:放入元素的順序是否和取出的順序一致

        TreeSet可以將元素按照規則排序,但是和放入的順序不同就是無序

        無序(和加入元素的順序不一樣)的,不可以重複的 演算法:雜湊演算法

        Set是介面不能new物件------>實現類HashSet;



        ①、區別:

        取元素的時候不能get

        迴圈迭代的時候不能使用簡單的for迴圈,

        要用迭代器或者增強型for迴圈(跟之前一樣)



        ②、不可重複

        (1)如何判斷物件相同?

        主要是根據物件的hashCode值判斷 而equals方法不是主要的

        原則上應該遵循:類重寫equals方法  同時重寫hashCode方法





        2、TreeSet  語法也是相同的

        SortedSet(Set的子介面)----->TreeSet 實現類

        TreeSet <> = new TreeSet<>();

        集合有序無序:放入元素的順序是否和取出的順序一致

        TreeSet可以將元素按照規則排序,但是和放入的順序不同就是無序

        TreeSet比較物件大小時,

        要使用類的compareTo方法,

        如果(前邊>後邊)返回正數

        如果(前邊<後邊)返回負數

        相等返回0,同時認為是相同的物件,不新增重複物件

        引用型別要先轉換為Compilable才能進行比較

        TreeSet 判斷物件相同時:

        是根據物件的大小判斷,如果兩個物件大小相等,就認為是相同的物件

        比較大小的compareTo方法 返回0 就是兩個相等的物件

        重寫compareTo方法時,注意返回0的情況



        Public  cladd  Student  implements  Compilable(介面){

        }(實現介面Compilable)

        可以自己重寫寫compareTo方法

        三、集合 Map(介面)


        --------->HashMap(實現類)--->非執行緒安全

        ---------> Hashtable(實現類)-->執行緒安全

        Hashtable:語法跟HashMap是一樣的

        區別:

        (1):null

        HashMap 是允許null 作為 key 和 value 的

        Hashtable 不允許 null 作為 key 或

        value 的

        (2):都實現了 Map 介面

        HashMap 父類是java . util . AbstractMap

        Hashtable 父類是java . util . Dictionary--->di ke shen ne rui --字典的意思

        (3):執行緒安全

        HashMap: 非執行緒安全   效能高

        Hashtable: 執行緒安全   效能低

        附加使用方法:


        1、建立ArrayList

        ArrayList list = new ArrayList();




        2、新增物件

        List . add(引用資料型別);


        List . add(new integer(1));-->基本資料型別

        將int --->Integer



        3、集合長度

        List . size();



        4、獲取某個

        List . get (索引位置);



        5、迴圈迭代

        1)For 迴圈:注意長度是size


        2)for each 迴圈

        for(型別 變數名 : 集合或者陣列){

        變數名 就是每次迴圈取出的元素

        }

        優點:程式碼減少簡單

        缺點:沒有索引位置,用索引位置的話需要自己定義一個計數器


        2)迭代器,迴圈迭代集合

        Iterator迭代器 介面-->yi te rui ter

        迭代器物件:都是通過要迭代的集合物件 . iterator() 返回迭代器物件

        Iterator it = list . iterator();

        Hasnext()

        Next();



        While(it . hasNext()){ 判斷有沒有下一個 有true 沒有 false

        Object 0 = it.next(); 向下移動,指向下一個並返回

        System.out.println(o);

        }

        迭代器只能用一次,想在迴圈必須在長生一個新的迭代器



        6、刪除

        (1)List . remove(索引位置 或者 物件);

        這裡輸入的物件要跟集合裡面的物件一模一樣才可以被刪



        (2)當有多個元素相同需要刪除的時候必須使用迴圈刪除(使用迭代器刪除):

        再迴圈中使用  迭代器刪除物件 it . remove(不需要傳引數);預設刪除當前或最後取出 的元素


        7、判斷集合是否為空

        (1)  If(list . size == 0)

        (2)  If ( list . isEmpty )

        (3) 不能寫 list == null   



        8、清空集合

        List . clear();

        9、插入

        List . add(int i , Objcet o)

        LinkedList

        除了具有ArrayList的功能還具有

        1、直接在第一個位置新增

        List . addFirst(“    ”);

        2、直接刪除第一個位置

        List . removeFirst();不需要傳參

        3、直接在最後一個位置新增

        List . addLast(“   ”);

        4、直接刪除最後一個

        List . removeLast();不需要傳參


        HashMap:



        建立物件

        HashMap map = new HashMap();



        新增元素:

        key-value  鍵值對 唯一的 key 對應 value

        Map . put( key, value );

        新增時 value 值是可以相同的

        Key 值如果相同 後來的會覆蓋原來的 value



        取元素 :

        通過唯一的key 獲取 value

        Map . get( key );



        判斷一個鍵值對是否存在?關鍵是看 key

        Boolean flag = map . containsKey(key值);

        If(falg){

        存在(包含)

        }else{

        不存在(不包含)

        }



        刪除:

        Map . remove(key);



        判斷集合是否為空:

        Map . isEmpty();



        清空集合:

        Map.clear(); -->ke lai er



        迴圈迭代:Map不支援迭代器迭代,不支援foreach

        (1)獲取所有的key :keySet() 返回所有的key,是一個set集合

        Set keys = map . keySet();

        For(Object key : keys){

        System.out.print(key+:);(可以不列印)

        System.out.println(map . get(key));

        }



        (2)獲取所有的value:values  

        使用map的 values()方法 返回所有的value值的 Collection集合 不能通過value獲取key

        Collection coll = map.values():

        for(Object o : coll){

        System.out.println(o);

        }



        (3)Entry---> en chui

        通過map的 entrySet()方法 獲取Entry(鍵值對)的Set集合  

        Entry結構是key-value

        有泛型

        Set <Entry<Integer,Song>> entrys = map.entrySet();

        For(Entry<Integer,Song>  e : entrys){

        Systrm.out.println( e.getkey() + e.getvalue);



        }



        沒有泛型(報黃線的那個)

        For(Ovject o : entrys){

        Map . Entry  e  = (Map. Entry) o;

        紅色省略

        Entry e = (Entry) o;

        Systrm.out.println( e.getkey() + e.getvalue);

        }


        願你一生努力
        一生被愛
        最想要的都擁有
        得不到的都釋懷
        我的故事很長
        你願聽~
        我願講~

相關推薦

集合 ListSetMap區別實現原理

Java中的集合包括三大類: 它們是Set、List和Map,它們都處於java.util包中,Set、List和Map都是介面,它們有各自的實現類。 Set的實現類主要有HashSet和TreeSet。

java 常用集合listSetMap區別及適用場景總結

 轉載請備註出自於:http://blog.csdn.net/qq_22118507/article/details/51576319                list與Set、Map區別及適用場景 1、List,Set都是繼承自Collection介面,Map則不是 2

ArrayListLinkedListVector的區別實現原理

ArrayList、LinkedList、Vector是集合中經常拿來比較和麵試的一個問題,我這裡簡要概括一下他們的區別和實現原理。儲存結構ArrayList和Vector是按照順序將元素儲存(從下表為0開始),刪除元素時,刪除操作完成後,需要使部分元素移位,預設的初始容量都

Java集合中:ListSetmap區別具體的使用場景高頻問題解析

1. Interface Iterable 迭代器介面,這是Collection類的父介面。實現這個Iterable介面的物件允許使用foreach進行遍歷,也就是說,所有的Collection集合物件都具有"foreach可遍歷性"。這個Iterable介面只有一個方法: iterator()。它返回一個代

java List Set Map集合聯絡與區別

List Map Set 集合 一、基礎概念 1. Collection 和 Map 介面 ​ Java集合框架主要由 Collection和Map兩個根介面及其子介面、實現類組成。 ​ 1) Collection 介面是Set、List、和Queue介面的父介面: ​ Coll

Java語言中ListSetMap三種集合之間的區別

List、Set是實現了Collection介面的子介面;而Map是另一個集合介面。 1.  三者之間的區別如下: 1) 元素重複性: ① List允許有重複的元素。任何數量的重複元素都可以在不影響現有重複元素的值及其索引的情況下插入到List集合中; ② Set集合

ListSetMap集合最常用六個子類及它們之間的區別詳解(含經典面試題)

集合: 在程式設計中,我們需要管理很多物件集,比如某班全部的同學資訊,某個公司的人員資料等等。JAVA集合就是提供某種資料結構的支援,即存放物件,並讓這些物件按照某種資料結構存放。 集合與陣列的區別: 1. 陣列存放的元素個數是在定義陣列時固定的。

Java-雜項:Java數組Array集合ListSetMap

title load 通用方法 數列 == 特殊 上一個 遍歷集合 list集合 之前一直分不清楚java中的array,list。同時對set,map,list的用法徹底迷糊,直到看到了這篇文章,講解的很清楚。 世間上本來沒有集合,(只有數組參考C語言)但有人想要,所以

【java讀書筆記】——Collection集合之六大介面(CollectionSetListMapIteratorComparable)

       兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的

ListSetMap區別關係

三者的關係圖: 一、超級介面 Iterable: 該介面中會返回一個迭代器,實現該介面的類都能作為forEach的物件。 二、Collection:繼承了Iterable介面,並且可以被以下類實現。 collection是集合listst和set的介面。

java中ListSetMap集合遍歷的幾種方式小結比較

一、集合類的通用遍歷方式, 用迭代器迭代:1.迭代遍歷whileIterator it = list.iterator();while(it.hasNext()){Object obj = it.next();System.out.println(it.next());}2.

listsetmap集合的詳細區別

一、list、set list、set的父類是collection,collection的父類是Iterator List:有序可重複集合 ①、List list1 = new ArrayList();     底層資料結構是陣列,查詢快,增刪慢;執行緒不安全,效

Spring中使用MapSetList數組屬性集合的註入方法配置文件

查看 main list highlight 配置 spring配置 pla lec while (1)下邊的一個Java類包含了所有Map、Set、List、數組、屬性集合等這些容器,主要用於演示spring的註入配置; [java] view plain c

MapSetList集合差別及聯系詳解

特性 互轉 字母順序 時也 參數 很慢 未定義 諸多 cto 提到集合之前,先說說數組Array和集合的區別:   (1)數組是大小固定的,並且同一個數組只能存放類型一樣的數據(基本類型/引用類型)   (2)JAVA集合可以存儲和操作數目不固定的一組數據。    (

ListSetMap集合大雜燴

鏈接 collect hid 鍵值 oar text 同步 二分 實現 java集合主要分三種:list、set、map;當中list和set都繼承自Collection接口,兩者最大差別是set不能包括反復元素 list的經常使用實現類有: Ar

ListSetMap常見集合遍歷總結

排序 out java tlab vhdl for var 定義 word Java中的集合有三大類,List、Set、Map,都處於java.util包中,List、Set和Map都是接口,不能被實例化,它們的各自的實現類可以被實例化。List的實現類主要有ArrayLi

listSetMap區別及適用場景

適合 線程 可重復 set、map equals 註意 位置 tor span 1、List,Set都是繼承自Collection接口,Map則不是 2、List特點: 元素有放入順序,元素可重復 ,Set特點:元素無放入順序,元素不可重復,重復元素會覆蓋掉,(註意:元

Spring 如何使用註解注入集合listsetmap

首先通過示例來展示,如何在Spring中使用註解注入集合類(list、map、set等) 定義介面InjectService,繼承InitializingBean介面,便於列印Spring注入的例項物件 public interface InjectService extends Initi

集合ListSetMap詳解

List、Set、Map是否繼承自Collection介面? List、Set是map不是,List是線性結構的容器,底層使用陣列實現,使用於按數值索引訪問元素的情形;Set儲存零散的元素且不允許有重複的元素(類似數學中的集合);Map儲存的是key-value鍵值對。 闡述ArrayL

ListSetMap區別

                                                                                               (圖一) 1.面試題:你說說collection裡面有什麼子類。 (其實面