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

1個(gè)圖,1個(gè)類,3個(gè)知識(shí)點(diǎn),6個(gè)接口.
- Collection 接口定義了存取一組對(duì)象的方法,Set和List分別定義了存儲(chǔ)方式
- set中的數(shù)據(jù)對(duì)象沒(méi)有順序且不可重復(fù).
- List中的數(shù)據(jù)對(duì)象有順序且可以重復(fù).
- Map接口定義了存儲(chǔ)"鍵(key)--值(value)映射對(duì)"的方法
Collection的方法舉例
import java.util.*; public class TestCollect { public static void main(String[] args) { Collection c = new ArrayList(); //ArrayList()相當(dāng)于是容器 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為添加.輸出這個(gè)c的時(shí)候,打印這個(gè)c的時(shí)候,相當(dāng)于調(diào)用了c.toString的方式.c.toString的輸出形式.首先[],然后挨個(gè)輸出盤里內(nèi)容,中間用逗號(hào)隔開. 以上的程序解決了表格的添加問(wèn)題,以及不斷重復(fù)的效率低下.
重寫equals
如果要重寫equals這個(gè)方法的話,必須重寫這個(gè)hashcode()索引方法..

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