J2SDK所提供的容器API位于java.util包內(nèi)
容器API的類圖和結(jié)構(gòu)如下圖所示:

1個圖,1個類,3個知識點,6個接口.
- Collection 接口定義了存取一組對象的方法,Set和List分別定義了存儲方式
- set中的數(shù)據(jù)對象沒有順序且不可重復.
- List中的數(shù)據(jù)對象有順序且可以重復.
- Map接口定義了存儲"鍵(key)--值(value)映射對"的方法
Collection的方法舉例
import java.util.*; public class TestCollect { public static void main(String[] args) { Collection c = new ArrayList(); //ArrayList()相當于是容器 c.add("hello"); c.add(new Name("f1","l1"));//添加,remove為刪除,原理為先去equals,如果true那么,則去除掉add內(nèi)容 c.add(new Integer(100)); System.out.println(c.size()); System.out.println(c); } } class Name { public String firstName,lastName; public Name(String firstName,String lastName){ this.firstName = firstName; this.lastName = lastName; } public String getfirstName(){ return firstName; } public String getlastName(){ return lastName; } public String toString() { return firstName + " " + lastName; //重寫輸出類型. } }
//add為添加.輸出這個c的時候,打印這個c的時候,相當于調(diào)用了c.toString的方式.c.toString的輸出形式.首先[],然后挨個輸出盤里內(nèi)容,中間用逗號隔開. 以上的程序解決了表格的添加問題,以及不斷重復的效率低下.
重寫equals
如果要重寫equals這個方法的話,必須重寫這個hashcode()索引方法..

Iterator接口
- 所有實現(xiàn)了Collection接口的容器類都有一個iterator方法用以返回一個實現(xiàn)了Iterator接口的對象
- Interator對象稱作迭代器,用以方便的實現(xiàn)對容器內(nèi)元素的遍歷操作
- Interator接口實現(xiàn)了如下方法;
- boolean hasNext;//判斷右邊是否有元素
- Object next(); //返回游標右邊的元素并將游標移動到下一位置(substring)
- void remove //刪除游標左邊的元素,在執(zhí)行完next之后該操作只能執(zhí)行一次
List接口算法
- java.util.Collections.提供了一些靜態(tài)方法實現(xiàn)基于List容器的常用算法
- void sort(List) 對List容器內(nèi)的對象進行排序
- void shuffle(List) 對List容器內(nèi)的對象進行隨機排列
- void reverse(List) 對List容器內(nèi)的對象進行逆序排列
- void fill(List,object) 用一個特定的對象重寫整個List容器
- void copy(List dest,List src)將src容器內(nèi)的內(nèi)容拷貝到dest容器
- int binarySearch(List,Objcet)對于順序的List容器,采用折半查找的方法查找特定對象.
Comparable接口
- 比較以上接口排序的時候需要怎樣的判定容器中的對象大小.
- 所有可以排序的類都實現(xiàn)了java.lang.Comparable接口,Comparable接口只有一個方法,
public int comparabTo(object boj); - 該方法
- 返回值為0,表示this = obj;
- 返回正數(shù)表示this > obj;
- 返回負數(shù)表示this < obj;
實現(xiàn)了comparable 接口的類通過實現(xiàn)comparaTo方法從而確定該類對象的排序方式.
如何選擇數(shù)據(jù)結(jié)構(gòu)
衡量標準:讀的效率和改的效率
- Array讀快改慢
- Linked改快讀慢
- Hash兩者之間
MAP接口
- 實現(xiàn)MAP接口的類用來存儲鍵--值 對.(key為索引)
- MAP接口的實現(xiàn)類有HashMap和TreeMap等.
- Map類中存儲的鍵--之對通過建來標識,所以鍵值不能重復(依然為equals方法,但是比較equals的方法很慢,所以直接比較Hashcode因為為int類型.).
object put(Object key,Object value);//這個key和對應(yīng)的value
Object get(Object key);//這個key對應(yīng)的value
Object remove(Objcet key);//刪除這個key和對應(yīng)的value
boolean containsKey(Object key);//是否包含這個key
boolean containsValue(Object value);//是否包含這個value
int siza();//一共多少對
boolean isEmpty();
void putAll(Map t);//把t的key全部放到里面.
void clear();
//以上內(nèi)容,在1.5版本以前需要將例如1的值,強行轉(zhuǎn)換成Integer然后才能輸入進去,而1.5之后,我們可以將1打包,輸入進去.自動完成打包,解包.減少我們的代碼數(shù)量
例如m1.put("one",new Integer(1));
現(xiàn)在為m1.put("one,1);自動將1打包成一個
JDK1.5之后新增加的東西,Auto-boxing/unboxing
- 在合適的實際自動打包,解包
- 自動將基礎(chǔ)類型轉(zhuǎn)換為對象
- 自動將對象轉(zhuǎn)換為基礎(chǔ)類型
import java.util.* public class TestArgewords{ private static final Integer One = new Integer(1); public static void main(String args[]) { Map m =new HashMap(); for(int i = 0;i <args.length;i++) { Integer freq = (Integer)m.get(args[i]); m.put{args[i],(freq == null? One : new Integer(freq.intValue() + 1))}; } System.out.println {m.size() + " "); System.out.println(m) } }
泛型
JDK1.4以前類型不明確;
- 裝入集合的類型都被當做Objcet對待,從而失去本身的實際類型
- 從集合中取出時往往需要轉(zhuǎn)型,效率低,容易出錯
解決辦法:
- 在定義集合的時候同時定義集合中對象的類型
- 示例:BasicGeneric.java
- 可以在定義Collcetion的時候指定
- 也可以在循環(huán)時用Iterator指定
好處:增強程序的可讀性和穩(wěn)定性.
總結(jié)1136
- 一個圖.
- 一個類
- Collections
- 三個知識點
- for
- Generic泛型
- Auto-boxing/unboxing自動打包,解包
- 六個接口
- Collection接口
- Set List接口
- Map接口
- iterator接口(用數(shù)組模擬鏈條方法圖記憶)
- Comparable(定義一個類的兩個對象誰大誰小).