標籤:java 元素 集合 介面 操作
集合架構的相關定義
集合:即儲存物件的容器。
架構:即類庫的集合。
集合架構:即用來表示和操作集合的統一架構,由相關的介面、實作類別和一些協助程式員完成編程的演算法。
集合的作用:
- 在類的內部,對資料進行組織
- 簡單而快速的搜尋大數量的條目
- 有的集合介面,提供了一系列排列有序的元素,並且可以在序列中間快速的插入或者刪除有關元素
- 有的集合介面,提供了映射關係,可以通過關鍵字(key)去快速尋找到對應的唯一對象,而這個關鍵字可以是任意類型
集合與數組的區別:
- 集合長度是可變的,數組長度是固定不變的
- 集合中只能儲存物件,不能儲存基礎資料型別 (Elementary Data Type),而數組中兩者都可儲存
- 集合中儲存的對象可以是任意類型的,而數組中只能儲存同一類型的對象或同一基本類型的資料
相關說明:
- 集合中可以儲存任意類型的對象是因為,對象存入集合中都變成了Object類型,所以取出時要注意類型轉換,當然也可以通過添加泛型來指定集合只能裝載某一特定類型的對象。
- 注意集合中只能儲存物件,而當我們在集合中添加整形等基礎資料型別 (Elementary Data Type)時仍然能夠編譯成功,這是因為在JDK1.5以後添加了自動裝箱拆箱的機制,int類型被自動裝箱成為Integer類型,以此類推。
集合架構的構成
由於集合架構中的很多類功能是相似的,所以設計了大量介面來規範類,最重要的是兩個根介面,Collection介面和Map介面
Collection介面下面又有三個重要的子介面:List介面、Queue介面、Set介面,這三個子介面對應著三個重要的實作類別:ArrayList、LinkList、HashSet
Map介面對應一個重要的實作類別:HashMap
Collection介面
Collection介面中的一些共性方法,主要是增刪改查:
添加方法:
- boolean add(Object e)—— 一次只能添加一個元素
- boolean addAll(Collection< extends E> c)—— 將一個參數容器中的所有元素添加到當前容器中
刪除方法:
- boolean remove(Object e) 刪除一個指定對象
- boolean removeAll(Collection<> c) 刪除指定Collection中和本Collection中相同的元素
- void clear ():直接將集合中的元素清空
判斷方法:
- boolean contains (Object)是否包含指定元素
- boolean containsAll(Collection<> c) 是否包含指定容器中的元素
- boolean imEmpty(): 是否有元素
擷取元素個數:
- int size (),擷取元素的個數
取交集:
- boolean retainAll(Collection<> c) 保留和指定collection集合中相同的元素,不相同的元素會被刪除
將集合轉成數組:
- Object[] toArray()
取出元素的方法(重點掌握)
- Iterator iterator()
迭代器Iterator
迭代器是一種設計模式,它是取出集合中元素的方式的一個對象,內建在容器中,可以通過iterator()方法完成,該方法返回一個Iterator類型對象。
將每一個容器中的取出方式進行了封裝。並對外暴露。這樣無論是什麼容器或者資料結構,只要內部取出方式實現了Iterator介面,都可以通過該介面取出這些容器中的元素。
它的出現,將容器的取出方式和容器的資料結構分離,降低了耦合性。而取出方式因為直接在訪問容器中的元素,並依賴具體的資料結構,所以被定義在了容器中。通過內部類在實現Iterator介面。
用法比較簡單:
- 使用方法iterator()要求容器返回一個Iterator。第一次調用Iterator的next()方法時,它返回序列的第一個元素。注意:iterator()方法是java.lang.Iterable介面,被Collection繼承。
- 使用next()獲得序列中的下一個元素。
- 使用hasNext()檢查序列中是否還有元素。
- 使用remove()將迭代器新返回的元素刪除。
例子:
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionText { public static void main(String[] args) { Collection<String> collection = new ArrayList<String>(); collection.add("a"); collection.add("b"); collection.add("c"); collection.add("d"); collection.add("e"); Iterator<String> iterator = collection.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }}
技巧性掌握
明確具體集合對象名稱的尾碼:
- 如果尾碼是List,都所屬於List體系,通常都是非同步的。
- 如果尾碼是Set,都所屬於Set體系通常都是非同步的。
- 這些體系中的其他子類對象,尾碼不是所屬介面名的,一般都是同步的。這在常用子類對象中通用。
明確資料結構:
- 對於jdk1.2版本的子類對象。尾碼名是所屬的體系。首碼名就是資料結構的名稱。
- ArrayList:看到Array,就要明確是數組結構;查詢快
- LinkedList:看到Link,就要明確鏈表結構,就要想到add get remove和 first last結合的方法。增刪快
- HashSet:看到hash ,就要明確是雜湊表,查詢快,而且所儲存的對象具有唯一性。就要想到元素必須覆蓋hashCode方法和 equals方法。
- TreeSet:就看到Tree,就要明確是二叉樹,可以對元素排序;就要想到兩種排序方式:自然排序:Comparable介面,覆蓋compareTo(一個參數)java.lang。比較排序:Comparator介面,覆蓋compare(兩個參數):java.util。判斷元素唯一性的依據就是比較方法的返回結果 return 0;
參考文章:
http://blog.csdn.net/watermusicyes/article/details/7985381
http://www.cnblogs.com/amboyna/archive/2007/09/25/904804.html
http://developer.51cto.com/art/201107/274951.htm
Java基礎之集合架構詳解(一)