Java高階應用程式設計——集合
阿新 • • 發佈:2018-12-26
一、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物件的引數 ,在獲取集合中的物件時,必須進行造型(強制型別轉換)操作。
造型操作可能出現問題,一般在程式執行時才能發生,發現問題比較困難。
集合中泛型的使用
在物件放入集合前,為其作個限制
在獲取集合中的物件時,不用進行造型的操作
當有不同型別的物件新增到集合中的時候,編譯時就能檢查出錯誤