【Java】集合類——筆記1

【java摘錄】

1.集合類概述

java.util包中提供了一些集合類,這些集合類又被稱爲容器。提到容器不難想到數組,集合類與數組的不同之處是,數組的長度是固定的,集合的長度是可變的;數組用來存放基本類型的數據,集合用來存放對象的引用。常用的集合有List集合、Set集合和Map集合,其中List集合和Set集合繼承了Collection接口,各接口還提供了不同的實現類。

2.Collection接口

Collection接口是層次結構中的根接口。構成Collection的單位稱爲元素。Collection接口通常不能直接使用,但該接口提供了添加元素、刪除元素、管理數據的方法。由於List接口和Set接口都繼承了Collection接口,因此這些方法對List集合與Set集合是通用的。常用方法如下表。

Collection接口的常用方法

                 方法

                                功能描述
add(E   e)將指定的第一項添加到該集合中
remove(Oject o)將指定的對象從該集合中移除
isEmpty()返回boolean值,用於判斷當前集合是否爲空
iterator()返回再次Collection的元素上進行迭代的迭代器。用於遍歷集合中的對象
size()返回int型值,獲取該集合中元素的個數

如何遍歷集合中的每個元素呢?通常遍歷集合,都是通過迭代器(Iterator)來實現。Collection接口中的iteration()方法可返回在此Collection進行迭代的迭代器。實現代碼如下:

import java.util.*;
public class Muster{                                      //創建類Muster              
	public static void main(String[] args){               
		Collection<String> list=new ArrayList<>();        //實例化集合類對象
        list.add("a");                                    //向集合添加數據
        list.add("b");
        list.add("c");
        Iterator<String> it = list.iterator();            //創建迭代器
        while(it.hasNext()){                              //判斷是否有下一個元素
            String str = (String)it.next();               //獲取集合中元素
            System.out.println(str);
        }
	}
} 運行結果爲:
a
b
c

3. List集合

List集合包括List接口以及List接口的所有實現類。List集合中的元素允許重複,各元素的順序就是對象插入的順序。類似Java數組,用戶可通過使用索引(元素在集合中的位置)來訪問集合中的元素。

3.1 List接口

List接口集成了Collection接口,因此包含Collection中的所有方法。此外,List接口還定義了一下兩個非常重要的方法。

  • get(int index):獲取指定索引位置的元素。

  • set(int index,Object obj):將集合中指定索引位置的對象修改爲指定的對象。

3.2 List接口的實現類

List接口的常用實現類又ArrayList與LinkedList。

  • ArrayList 類實現了可變的數組,允許保存所有元素,包括null,並可以根索引位置對集合進行快速的隨機訪問;缺點是想指定的索引位置插入對象或刪除對象的速度較慢。
  • LinkedList 類採用鏈表結構保存對象。這種結構的優點是便於向集合中插入和刪除對象,需要向集合中插入、刪除對象時,使用LinkedList類實現的List集合的效率較高;但對於隨機訪問集合中的對象,使用LinkedList類實現List集合的效率較低。
    使用List集合時通常聲明爲List類型,可通過不同的實現類來實例化集合。
List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();

在上面實例化list集合中,E可以是合法的Java數據類型。例如,如果集合中的元素爲字符串類型,那麼E可以修改爲String。

在項目中創建類Gather,在主方法中創建集合對象,通過Math類的random()方法所及獲取集合中的某個元素,然後移除數組中索引位置是“2”的元素,最後遍歷數組。如下:

public class Gather{
    public static void main(String[] args){
        List<String> list = new ArrayList<>;
        list.add("a");
        list.add("b");
        list.add("c");
        int i = (int)(Math.random()*list.size());
        System.out.println("隨機獲取數組中的元素:"+list.get(i));
        list.remove(2);
        System.out.println("移除數組中索引是2的元素後,數組中的元素有:");
        for(int j=0;j<list.size();j++){
            System.out.println(list.get(j));
        }
    }
}
與數組相同,集合的索引也是從0開始。

4. Set集合

Set集合中的對象不安特定的方式排序,知識簡單地把對象加入集合中,但Set集合中不能包含重複對象。Set集合由Set接口和Set接口的實現類組成的。Set接口集成了Collection接口,因此包含Collection接口的所有方法。

注意:Set的構造有一個約束條件,傳入的Collection對象不能有重複值,必須小心操作可變對象(Mutable Object)。如果一個Set中的可變元素改變了自身狀態導致Object.equals(Object)=true,則會出現問題。

Set接口常用的實用類有HashSet類與TreeSet類。

  • HashSet類實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證Set的迭代順序,特別是它不保證該順序恆久不變。此類允許實用null元素。
  • TreeSet類不僅實現了Set接口,還實現了java.util.SortedSet接口,因此,TreeSet類實現的Set集合在遍歷集合時按照自然順序遞增排序,也可以按照指定比較器遞增排序,即可以通過比較器對用TreeSet類實現的Set集合中的對象進行排序。TreeSet類新增的方法如下表。
TreeSet類增加的方法

   方法

      功能描述
first( )返回此Set中當前第一個(最低)元素
last( )返回此Set中當前最後一個(最高)元素
還有:

comparator()、
headSet(E toElement)、
subSet(E fromElement,E fromElement)、
tailSet(E fromElement)

5. Map集合

Map集合沒有繼承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每個key只能映射一個value。key還決定了存儲對象在映射中的存儲位置,但不是由key對象本身決定的,而是通過一種“散列技術”進行處理,產生一個散列碼的整數值。散列碼通常用作一個偏移量,該偏移量對應分配給映射的內存區域的起始位置,從而確定存儲對象在映射中的存儲位置。Map集合包括Map接口以及Map接口的所有實現類。

5.1 Map接口

Map接口提供了將key映射到值的對象。一個映射不能包含重複的key,每個key最多隻能映射到一個值。Map接口中同意提供了集合的常用方法。
Map集合中允許值的對象時null,而且沒有個數限制。

5.2 Map接口的實現類

Map接口常用的實現類又HashMap和TreeMap。建議使用HashMap類實現Map集合,因爲由HashMap類實現的Map集合添加或刪除映射關係效率更高。HashMap是基於哈希表的Map接口的實現,HashMap通過哈希碼對其內部的映射關係進行快速查找;而TreeMap中的映射關係存在一定的順序,如果希望Map集合中的對象也存在一定的順序,應該使用TreeMap類實現Map集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章