Java基礎總結-容器

容器

1.容器的概念:Java API 所提供的的一系列類的實例,用於在程序中存放對象(裝各種各樣的對象的器皿)(如:數組就是一種容器)

2.容器API

J2SDK所提供的的容器API位於java.util包內

Collection 接口 -- 定義了存取一組對象的方法,其子接口Set和List分別定義了存儲方式.

/*Set 中的數據對象沒有順序且不可以重複.*/ 重複:指兩個對象之間互相 equals

/*List中的數據對象有順序且可以重複.*/


Map接口定義了存儲 "鍵(key)--值(value)映射對" 的方法


3.Collection 接口
容器類對象在調用remove、contain等方法時需要比較對象是否相等,這會涉及到對象類型的equals方法和hashCode方法;

對於自定義類型,需要重寫equals和hashCode方法以實現自定義對象相等規則.

注意:相等的對象應該具有相等的hash codes./*(重寫equals方法,必須重寫hashCode方法)*/(當對象當作索引,當作鍵的時候有用)


4.Iterator 接口 /*(總的來說,Iterator 就是一個統一的來遍歷我們Collection裏面所有元素的方法)*/

所有實現Collection接口的容器類都有一個 iterator 方法用以返回一個實現了 Iterator 接口的對象.

Iterator 對象稱作迭代器,用以方便的實現容器內元素的遍歷操作.

Iterator 接口定義瞭如下方法:

boolean hasNext(); //判斷遊標右邊是否含有元素

Object next();  //返回遊標右邊的勻速並將遊標移動到一下個位置

void remove();  //刪除遊標左面的元素,在執行玩next之後該操作只能執行一次

5.Set 接口(沒有提供額外的方法)

 Set接口本身是 Collection 的子接口,Set 接口沒有提供額外的方法,但是實現 Set 接口的容器類中的元素是沒有有順序的,而且不可以重複

 Set 容器可以與數學中的“集合”的概念相對應.

J2SDK API 中所提供的 Set 容器類有 HashSet,TreeSet 等.


6.List 接口和 Comparable 接口

List 接口是 Collection 的子接口,實現 List 接口的容器類中的元素是有順序的,而且可以重複.

List 容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素.

J2SDK 所提供的 List 容器類有 ArrayList,LinkedList等. 
   

/*Comparable 接口*/(Comparable也可以應用泛型):

所有可以排序的接口都實現了Comparable接口(如:Collection類) 

Comparable 接口中只有一個方法,public int comparableTo(Object obj)   返回0,相等 ;正數 this > obj ; 負數, this < obj


7.Collections 類

類 java.util.Collections 提供了一些靜態方法實現了基於 List 容器的一些常用算法.

void sort(List) 對List容器內元素排序      //由於Collections類實現了Comparable接口,纔可以對元素排序

void shuffle(List) 對List容器內的對象進行隨機排列

void reverse(List) 對List 容器內的對象進行逆序排列

void fill(List,Object) 用一個特定的對象重寫整個List容器

void copy(List dest,List src) 將src List 容器內容拷貝到dest List 容器

int binarySearch(List,Object) 對於順序的List容器,採用二分法查找特定對象.


8.Map 接口

實現 Map 接口的類用來存儲 鍵-值 對. Map 接口的實現類有 HashMap 和TreeMap 等.

 Map 類中 存儲的 鍵-值 對通過鍵來標識,所以鍵值不能重複 (比較是否重複這裏用equals效率太低,用hashCode)


9.自動打包/解包(JDK1.5後)

自動將基礎數據類型轉換爲對象    如 int 和 Integer 

自動將對象轉換爲基礎數據類型

m.put(args[i],(freq == null ? ONE : new Integer(freq.intValue() + 1)));  == m.put(args[i],(freq == 0 ? ONE : freq + 1));

自動打包解包如上: /*一般來說,就是可以省略 new Integer 和 .intValue() 或和它類似的 */(在對象創建的時候的 new Integer也是可以省略的)


10.泛型(Generic)(JDK1.5新增)(推薦使用集合的時候,泛型也使用)

在定義集合的時候同時定義集合中對象的類型,可以在定義Collection的時候指定 

Collection<String> c2 = new HashSet<String>();

也可以在循環時用Iterator指定

for(Iterator<String>it = c2.iterator(); it.hasNext(); ) {

String s = it.next();    //用了泛型之後,這裏就不需要強制轉化了

System.out.println(s);

}

 好處:增強程序的可讀性和穩定性

 /* 通俗的來講,使用泛型最直接的好處就是在某些地方不需要進行強制轉化了*/



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