【Java基礎】 (List、Set、Map、Stack、Queue)總結
1、引入背景
如果一個程式只包含固定數量的且其生命週期都是已知的物件,那麼這是一個非常簡單的程式,而在通常情況下程式總在執行時才知道某些條件去建立物件,所以就不能通過建立命名的引用來持有每一個物件,因為你不知道這樣的物件有多少個,java中有多種方案來儲存物件的引用,下面就將介紹容器類來解決這樣的問題。
2、Collection容器
其代表一個獨立的元素序列,這些元素都遵循一條或者多條規則。
2.1、List
List可以將元素維持在特定序列中,常見的子類實現有
ArrayList 快速查詢,插入刪除效率低
LinkedList 快速插入刪除、查詢效率低
2.2、Set
用來儲存不重複的元素,常用的實現有
HashSet
TreeSet 用於對結果進行排序。
2.3、Stack
由於stack在當初設計時候有缺陷,所以現在不建議使用stack,如果要使用棧這種資料結構,建議使用LinkedList,LinkedList能夠直接實現棧的所有功能和方法,所以建議使用LinkedList.
2.4、Queue
佇列是一種先進先出的容器,LinkedList實現了queue介面,所以可以通過向下轉型來通LinkedList構造queue
Queue<Integer> queue= new LinkedList<Integer >();
其類圖關係如下:
3、Map容器
Map。一組成對的“鍵值對”物件,允許你使用鍵查詢值。
常用實現有
HashMap 效率高、執行緒不安全(常用)
Hashtable 效率低、執行緒安全
TreeMap 用於排序
其類圖關係如下:
4、Iterator 和iterable區別
Iterator是迭代器類,而Iterable是介面。
引入迭代器這個物件的目的是為了從一個collection或者Map的物件中取資料,而不必關心取資料的具體底層實現,如在List中add()和get()分別是插入元素和取出元素,而在Map中put(),才是插入元素,迭代器是一個物件,其目的是遍歷和取出序列中的物件。而客戶端程式設計師不必知道該序列底層是通過Set、List還是Map實現。
Iterator的功能:
1、使用iterator()方法要求返回一個iterator
2、使用next() 獲得序列中下一個元素
3、使用hasNext()檢查序列中是否還有元素
4、使用remove刪除迭代器新近返回的元素
用法如下:
List<integer> list= new ArrayList<Integer>();
Iterator<Integer> it=list.iterator();
而對於iterable,任何實現iterable介面的類都可以使用迭代器進行遍歷。
5、Collection和Collections區別
java.util.Collection 是一個集合介面。它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。
java.util.Collections 是一個包裝類。它包含有各種有關集合操作的靜態多型方法。此類不能例項化,就像一個工具類,服務於Java的Collection框架。