【全棧之路】JAVA基礎課程六_集合(20190615v1.0)

歡迎進入JAVA基礎課程

博客地址:https://blog.csdn.net/houjiyu...
本系列文章將主要針對JAVA一些基礎知識點進行講解,爲平時概括所總結,無論是剛接觸JAVA開發菜鳥仍是業界資深人士,都但願對廣大同行帶來一些幫助。如有問題請及時留言或加QQ:243042162。數據庫

寄語:
再走長征路,回顧過往崢嶸歲月,重溫重要歷史事件,砥礪前行,用腳步丈量新時代的長征路。工做道路上,咱們也要弘揚這種長征精神,堅持不懈,一步一個腳印,腳踏實地,朝着本身的目標前行。

集合

1. 集合框架圖

(1)縮略版數組

clipboard.png

(2)詳細版
clipboard.png安全

2.集合和數組區別

clipboard.png

3.Collection接口

clipboard.png

  • List接口:元素按進入前後有序保存,可重複數據結構

    (1)LinkedList:底層數據結構是鏈表,查詢慢,增刪快,線程不安全,效率高,能夠存儲重複元素
    (2) ArrayList:底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高,能夠存儲重複元素
    (3) Vector:底層數據結構是數組,查詢快,增刪慢,線程安全,效率低,能夠存儲重複元素

clipboard.png

  • Set 接口: 僅接收一次,不可重複,並作內部排序多線程

    • HashSet 使用hash表(數組)存儲元素
      LinkedHashSet 鏈表維護元素的插入次序
    • TreeSet 底層實現爲二叉樹,元素排好序
HashSet和TreeSet區別:
(1)Treeset 中的數據是自動排好序的,不容許放入 null 值。
(2)HashSet 中的數據是無序的,能夠放入 null,但只能放入一個 null,二者中的值都不能重複,就如數據庫中惟一約束。
(3)HashSet 要求放入的對象必須實現 HashCode()方法,放入的對象,是以 hashcode 碼做爲標識的,而具備相同內容的 String 對象,hashcode 是同樣,因此放入的內容不能重複。可是同一個類的對象能夠放入不一樣的實例

clipboard.png

4.Map

clipboard.png

  • HashMap和HashTable
HashMap 和 Hashtable 都實現了 Map 接口,所以不少特性很是類似。可是,他們有如下不一樣點:
(1)HashMap 容許鍵和值是 null,而 Hashtable 不容許鍵或者值是 null。
(2)Hashtable 是同步的,而 HashMap 不是。所以,HashMap 更適合於單線程環境,而 Hashtable 適合於多線程環境。

clipboard.png

  • TreeMap

clipboard.png

5.集合遍歷

(1)list遍歷框架

public class CollectionMain {
    public static void main(String[] args) {
        List<String> testList = new ArrayList<>();

        testList.add("1");
        testList.add("2");
        testList.add("3");

        System.out.println("使用Iterator迭代.....");
        Iterator<String> iterator = testList.iterator();
        while (iterator.hasNext()){
            String value = iterator.next();
            System.out.printf("%s ",value);
        }

        //在使用ListIterator迭代時,開始也須要正向迭代,而後在倒序迭代
        System.out.println("\n\n使用ListIterator迭代.....");
        System.out.println("正向遍歷.....");
        ListIterator<String> listIterator = testList.listIterator();
        while (listIterator.hasNext()){
            String value = listIterator.next();
            System.out.printf("%s ",value);
        }
        System.out.println("\n反向遍歷.....");
        while (listIterator.hasPrevious()){
            String value = listIterator.previous();
            System.out.printf("%s ",value);
        }
    }


}

輸出結果spa

使用Iterator迭代.....
1 2 3 

使用ListIterator迭代.....
正向遍歷.....
1 2 3 
反向遍歷.....
3 2 1

(2)map遍歷.net

public class MapMain {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(5, "a");
        map.put(2, "b");
        map.put(3, "c");
        map.put(4, "d");
        map.put(null, "e");// 和上面相同 , 會本身篩選
        System.out.println(map.size());

        //方式一:經過Map.keySet遍歷key和value
        for(Map.Entry<Integer,String> entry:map.entrySet()){
            System.out.println("1,key:"+entry.getKey()+",value:"+entry.getValue());
        }

        //方式二:經過Map.entrySet使用iterator遍歷key和value
        Iterator<Map.Entry<Integer,String>> iterator=map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer,String> entry=iterator.next();
            System.out.println("2,key:"+entry.getKey()+",value:"+entry.getValue());
        }

        //方法三:通keyset遍歷
        for(Integer key:map.keySet()){
            String v = map.get(key);//獲得每一個key多對用value的值
            System.out.println("3,key:"+key+",value:"+v);
        }

    }
}

輸出結果線程

5
1,key:null,value:e
1,key:2,value:b
1,key:3,value:c
1,key:4,value:d
1,key:5,value:a
2,key:null,value:e
2,key:2,value:b
2,key:3,value:c
2,key:4,value:d
2,key:5,value:a
3,key:null,value:e
3,key:2,value:b
3,key:3,value:c
3,key:4,value:d
3,key:5,value:a
相關文章
相關標籤/搜索