Java Collection、Map、 Collections 介紹及區別


Java 中有兩個合集父接口 CollectionMapCollection 類型每個集合容器中只有一個元素,Map類型每個集合容器中有兩個 key-value ,類似一個 No Sql。而 Collections 更像一個工具類,與前面兩個不是一個性質。

1 Collection 接口類

Collectionjava.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection 接口在 Java 類庫中有很多具體的實現。Collection 接口的意義是為各種具體的集合提供了最大化的統一操作方式。

例如我們常用的 mapsetlistvector 都是繼承了 Collection

1.1 Collection 的父類

CollectionIterable 類的擴展(extends),Iterable 類的所有的方法,Collection 都繼承,都是可直接使用。

+Collection 這個接口extends自 --java.lang.Iterable接口
    +List 接口 
        -ArrayList 類
        -LinkedList 類
        -Vector 類     此類是實現同步的

    +Queue 接口
        +不常用,在此不表.

    +Set 接口
        +SortedSet 接口
            -TreeSet 類
    -HashSet

1.2 Collection 方法與實現

Collection 本身是一個接口,他的具體方法的實現都在他的子類中實現。

方法名 說明
boolean add(E e) 向集合添加元素e,若指定集合元素改變了則返回true
boolean addAll(Collection<? extends E> c) 把集合C中的元素全部添加到集合中,若指定集合元素改變返回true
void clear() 清空所有集合元素
boolean contains(Object o) 判斷指定集合是否包含對象o
boolean containsAll(Collection<?> c) 判斷指定集合是否包含集合c的所有元素
boolean isEmpty() 判斷指定集合的元素size是否為0
boolean remove(Object o) 刪除集合中的元素對象o,若集合有多個o元素,則只會刪除第一個元素
boolean removeAll(Collection<?> c) 刪除指定集合包含集合c的元素
boolean retainAll(Collection<?> c) 從指定集合中保留包含集合c的元素,其他元素則刪除
int size() 集合的元素個數
T[] toArray(T[] a) 將集合轉換為T類型的數組

1.2.1 add

可以添加不同類型的對象。

        //add 方法
        Collection collection = new ArrayList();
        collection.add("增加元素1,只能是單一元素");

        ArrayList arrayList = new ArrayList();
        arrayList.add("增加元素1,只能是單一元素");

        List<String> list = new ArrayList<>();
        list.add("增加元素1,只能是單一元素");

        Collection<String> coll = new HashSet<>();
        coll.add("增加元素1");

1.2.2 addAll

        //add 方法可以增加重復相同元素、可以增加不同類型的元素
        Collection collection = new ArrayList();
        collection.add("增加元素1,只能是單一元素");
        collection.add("增加元素2"); 

        Collection<String> coll = new HashSet<>();
        coll.add("增加元素1");
        coll.add("相同元素");
        coll.add("相同元素");
        coll.add("相同元素");
        coll.add("相同元素");

        //addAll
        // 添加一個集合數據
        collection.addAll(coll);

1.2.3 contains 是否包含

        //contains 是否包含
        boolean a= coll.contains("A");
        boolean b = coll.contains("相同元素");

1.2.4 remove 刪除指定元素

        coll.remove("相同元素");
        collection.removeAll(coll);

1.2.5 removeAll 刪除指定集合

        collection.removeAll(coll);

1.2.6 遍歷的4種方法

        //遍歷 for (常用)
        for (String str: coll
             ) {
            System.out.println(str);

        }
        //遍歷 forEach (Java 8 及以上版本)
        coll.forEach(e->System.out.println(e));
        //遍歷 使用 Iterator hasNext
        Iterator<String> it=coll.iterator();
        while (it.hasNext()){
            String str=it.next();
            System.out.println(str);
        }
        //遍歷 利用 Iterator 的 forEachRemaining (Java 8 及以上版本)
        it.forEachRemaining(str->System.out.println(str));

1.2.6 Java8 謂詞(predicate)lambda表達式操作

        //predicate 操作
        Collection<Integer> coll2 = new ArrayList<>();
        // 添加0-49
        for (int i = 0; i < 50; i++) {
            coll2.add(i);
        }
        coll2.removeIf(e->(e>8 && e<20));

1.2.7 Java8 Stream 流操作

暫無

2 Map 接口類

Map 在 Java 中表示為鍵值對存儲結構 Map<K,V>,他的常用方法包括了

  • get(Object key) 獲取指定鍵(key)所對應的值(value)
  • put(K key,V value) 將指定的鍵與值對應起來,並添加到集合中
  • remove(Object key) 根據指定的鍵(key)刪除元素,返回被刪除元素的值(value)。
+Map 接口
    -HashMap 類 (除了不同步和允許使用 null 鍵/值之外,與 Hashtable 大致相同.)
    -Hashtable 類 此類是實現同步的,不允許使用 null 鍵值
    +SortedMap 接口
       -TreeMap 類

2.1 Map 遍歷

方法1 在for循環中使用entries實現Map的遍歷

        /**
		 * 方法1: Map <String,String> 在for循環中使用entries實現Map的遍歷
		 */
		System.out.println("方法1-----------------------------");
		Map <String,String> map = new HashMap<String,String>();
		map.put("car1", "red");
		map.put("car2", "yellow");
		map.put("car3", "blue");
		for(Map.Entry<String, String> entry : map.entrySet()){
			String mapKey = entry.getKey();
			String mapValue = entry.getValue();
			System.out.println(mapKey+":"+mapValue);
		}

方法2 在for循環中遍歷key或者values

        /**
		 * 方法2: Map <String,String> 在for循環中遍歷key或者values,一般適用於只需要map中的key或者value時使用,在性能上比使用entrySet較好
		 */
		System.out.println("方法2-----------------------------");
		for(String key : map.keySet()){
			System.out.println(key);
		}
		for(String value : map.values()){
			System.out.println(value);
		}

方法3 通過Iterator遍歷

        /**
		 * 方法3: Map <String,String> 通過Iterator遍歷
		 */
		System.out.println("方法3-----------------------------");
		Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
		while(entries.hasNext()){
			Map.Entry<String, String> entry = entries.next();
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+":"+value);
		}

3 Collections 幫助類

Collectionsjava.util.Collections 是一個包裝類,它包含有各種有關集合操作的靜態多態方法。此類不能實例化,就像一個工具類,服務於JavaCollection 框架。

3.1 sort(List list) 對集合進行排序

對已知集合 Collection 按照自然順序排序

        List<Integer> coll2 = new ArrayList<>();
        // 添加0-49
        coll2.add(12);
        coll2.add(3);
        coll2.add(2);
        coll2.add(4);
        coll2.add(5);
        coll2.add(89);
        coll2.add(1);
        coll2.add(2);
        coll2.add(6);
        coll2.forEach(e->System.out.println(e));
        Collections.sort(coll2);
        coll2.forEach(e->System.out.println(e));

3.2 reverse(List list) 反轉集合中元素的順序

        List<Integer> coll2 = new ArrayList<>();
        // 添加0-49
        coll2.add(12);
        coll2.add(3);
        coll2.add(2);
        coll2.add(4);
        coll2.add(5);
        coll2.add(89);
        coll2.add(1);
        coll2.add(2);
        coll2.add(6);
        coll2.forEach(e->System.out.println(e));
        Collections.sort(coll2);
        coll2.forEach(e->System.out.println(e));
        Collections.reverse(coll2);

3.3 shuffle(Collection) 對集合進行隨機排序

Collections.shuffle(coll2);
        Random random=new Random();
        random.nextInt();
        Collections.shuffle(coll2,random);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM