1. 程式人生 > >Java高階應用程式設計——集合

Java高階應用程式設計——集合

一、Java中的集合類

集合概述
    Java中集合類是用來存放物件的
    集合相當於一個容器,裡面包容著一組物件 ————容器類
    其中的每個物件作為集合的一個元素出現
    Java API提供的集合位於java.util包內
java中陣列與集合的比較
    陣列也是容器,它是定長的,訪問較快,但是陣列不會自動擴充
    陣列可以包含基本資料型別或者引用型別的物件,而集合中只能包含引用型別的物件

Java中集合框架層次結構
這裡寫圖片描述

二、Collection介面

Collection介面
    一組稱為元素的物件
    一個Collection中可以放不同型別的資料
    是Set
介面和List的父類 是否有特定的順序以及是否允許重複,取決於它的實現 Set——無序的集合;不允許重複 List——有序的集合,允許重複
Set介面
    Collection 的子介面
        用來包含一組無序無重複的物件
            無序——是指元素存入順序和集合記憶體儲的順序不同
            無重複——兩個物件e1和e2,如果e1.equals(e2)返回true,則認為e1,e2重複
    Set介面實現類
        HashSet——HashSet的特性在於其內部物件的雜湊存取,即採用雜湊技術
        TreeSet——TreeSet存入的順序跟儲存的順序不同,但是儲存是按照排序儲存的
List介面
    Collection的子介面
    用來包含一組有序有重複的物件
    List中的元素都對應一個整型的序號,記載其在容器中的位置,可以根據序號存取容器中的元素
    List有兩種集合實現類
        ArraryList
        LinkedList

List介面常用方法

//List構造方法
    List list = new ArrayList();
//在列表中的index位置,新增element元素
        `void add(int index,Object element) `
//例如:在下標為0的地方新增一個物件Object
`list.add(1,"Object");`
//返回列表中指定位置的元素
    `Object get(int index)  `
//例如:返回列表list的第一個元素
    `System.out.println(list.get(1))`
//      返回某個物件在集合中第一次出現的所引值,不存在返回-1
        System.out.println(list.indexOf("我是一個物件"));
        System.out.println(list.indexOf(new Date()));
//      返回某個物件在集合中最後一次出現的所引值,不存在返回-1
        System.out.println(list.lastIndexOf("我是一個物件"));
        System.out.println(list.lastIndexOf(new Date()));
//      移除列表中指定位置的元素
        list.remove(1);
        System.out.println(list);
//      用指定元素替換集合中的指定位置的元素
        list.set(2, "我是新的一個物件");
        System.out.println(list);
ArraryList與LinkedList的比較
    儲存結構:
        ArrayList是線性順序儲存
        LinkedList物件彼此間串連起來的一個連結串列
    操作效能
        ArrayList適合隨機查詢的場合
        LinkedList元素的插入和刪除操作性高
    從功能上看,LinkedList要多一些
    Iterator物件稱作迭代器,用來方便的實現對容器內的元素進行遍歷操作
    所有實現了Collection介面的集合類都有一個iterator( )方法,返回一個實現了Iterator介面的物件
    Iterator物件實現了統一的一個用來遍歷Collection中物件的方法
    Iterator是為遍歷而設計,能夠從集合中取出元素和刪除元素,但是沒有新增元素的功能
    Iterator的功能上比較簡單,使用中,只能單向移動
 Collections類是類似於Arrays類的公用工具類 ,它提供了一些static方法供集合類使用或操作集合類 

三、Map介面

    Map記憶體儲的是鍵/值對這樣以成對的物件組(可以把一組物件當成一個元素),通過“鍵”物件來查詢“值”物件
    Map是不同於Collection的另外一種集合介面
    Map中,key值是唯一的(不能重複),而key物件是與value物件關聯在一起的
    Map介面有兩個實現:
        HashMap — key/value對是按照Hash演算法儲存的
        TreeMap — key/value對是排序(按key排序)儲存的

這裡寫圖片描述
這裡寫圖片描述

HashMap 與 TreeMap 的比較
    HashMap基於雜湊表實現。
    TreeMap基於樹實現。
    HashMap可以通過調優初始容量和負載因子,優化HashMap空間的使用。
    TreeMap沒有調優選項,因為該樹總處於平衡狀態
    HashMap效能優於TreeMap
HashMap 與 Hashtable 的比較
    Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現。
    Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的。
    HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
如何選擇集合類
    Set記憶體放的元素不允許重複,List存放的元素有一定的順序。
    Map的應用主要在利用鍵/值對進行快速查詢。
    ArrayList和LinkedList的區別在於隨機查詢效能上ArrayList要好,但LinkedList的中間元素的插入與刪除效能好 。
    HashSet和TreeSet的區別在於集合內元素是否排序 。
集合在使用上的問題 示例 CollectionException.java
    集合中的add( )方法接受的是一個Object物件的引數 ,在獲取集合中的物件時,必須進行造型(強制型別轉換)操作。
    造型操作可能出現問題,一般在程式執行時才能發生,發現問題比較困難。
集合中泛型的使用
    在物件放入集合前,為其作個限制
    在獲取集合中的物件時,不用進行造型的操作
    當有不同型別的物件新增到集合中的時候,編譯時就能檢查出錯誤