容器是什么?通俗的講容器指可以裝其它東西的器皿,前面我們提到的數(shù)組便是容器的一種,容器的概念在JAVA中便可以理解為用來(lái)存儲(chǔ)其它對(duì)象的器皿。本篇就讓我們一起來(lái)認(rèn)識(shí)一下JAVA為我們提供的容器類。
1、容器API:
J2SDK提供的容器API位于java.util包內(nèi),容器API的類圖結(jié)構(gòu)如下圖所示:
2、JAVA容器的組成:
Collection接口——定義了存取一組對(duì)象的方法,其子接口Set和List分別定義了存取方式。Set中的數(shù)據(jù)對(duì)象沒(méi)有順序但不可以重復(fù);List中的對(duì)象有順序且可以重復(fù),List又被細(xì)分為L(zhǎng)inkedList和ArrayList,從名字上應(yīng)該可以看出它的不同,LinkedList以鏈表的方式來(lái)存儲(chǔ)數(shù)據(jù),ArrayList則以數(shù)組的方式來(lái)存儲(chǔ)數(shù)據(jù)。說(shuō)完了Collection接口,下面我們看一下Map接口,Set和List都是單值存儲(chǔ),而Map則提供的是一種鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),鍵和值之間一一映射。
3、Collection接口定義的方法:
int size():容器中對(duì)象的數(shù)目
boolean isEmpty():是否為空
void clear():清空
boolean contains(Object element):是不是包含element對(duì)象
boolean add(Object element):添加element的對(duì)象
boolean remove(Object element):移除element對(duì)象
Iterator iterator():返回一個(gè)Iterator對(duì)象,用于遍歷容器中的對(duì)象
bollean containsAll(Collection c):是否包含c容器中的所有對(duì)象
boolean addAll(Collection c):把c容器中的所有對(duì)象添加到容器中
boolean removeAll(Collection c):從容器中移除C容器中存在的所有對(duì)象
boolean retainAll(Collection c):求當(dāng)前的集合類與C容器的交集
Object[] toArray():把容器中的所有對(duì)象轉(zhuǎn)換到對(duì)應(yīng)的數(shù)組中
4、Iterator接口:
所有實(shí)現(xiàn)了Collection接口的容器都有一個(gè)iterator方法,用于返回一個(gè)實(shí)現(xiàn)了Itertaor的對(duì)象。Iterator對(duì)象稱為迭代器,用于方便的實(shí)現(xiàn)對(duì)容器中元素的遍歷。
5、Iterator接口的方法:
boolean hasNext():判斷游標(biāo)右邊是否有元素
Object next():返回游標(biāo)右邊的元素,并將游標(biāo)移動(dòng)到下一個(gè)位置。
void remove():刪除游標(biāo)左邊的元素,并將游標(biāo)移動(dòng)到下一個(gè)位置,該方法一次只能執(zhí)行一次
public class Iter { /** * @param Interator接口 */ public static void main(String[] args) { Collection coll = new HashSet(); coll.add(new Integer(1)); coll.add(new Integer(2)); coll.add(new Integer(3)); Iterator it = coll.iterator(); while(it.hasNext()){//判斷下一位置是否為空 Integer i = (Integer) it.next(); if(!i.equals(new Integer(1))){ System.out.PRintln(i); }else{ it.remove();//移除 } } }}6、增強(qiáng)的for循環(huán):
JAVA SDK1.5新增的一個(gè)方法,對(duì)于遍歷array或Collection的時(shí)候相當(dāng)簡(jiǎn)便。缺陷在于對(duì)于數(shù)組元素不能方便的訪問(wèn)下標(biāo)值;對(duì)于集合與Iterator相比不能方便的刪除容器中的元素。結(jié)論:除了簡(jiǎn)單的遍歷和讀取其中的內(nèi)容外,不建議使用增強(qiáng)的for循環(huán)。使用方法:
public class test { /** * @param 增強(qiáng)for循環(huán) */ public static void main(String[] args) { Collection<String> coll = new ArrayList<String>(); coll.add(String.valueOf("a")); coll.add(String.valueOf("b")); coll.add(String.valueOf("c")); for(String str : coll){ System.out.println(str); } }}7、Set接口:
Set接口是Collection接口的子接口,Set接口沒(méi)有提供額外的方法,但實(shí)現(xiàn)了Set接口的容器類中的元素是沒(méi)有順序,并且不可以重復(fù)的。Set容器類似于數(shù)學(xué)中集合的概念,J2SDK API中所提供的Set容器類有HashSet和TreeSet等。
public class test { /** * @param Set接口 */ public static void main(String[] args) { Collection coll = new HashSet(); coll.add("hello"); coll.add("Word"); coll.add(new Integer(100)); System.out.println(coll); }}8、List接口:
List接口是Collection接口的子接口,List容器的中的元素沒(méi)有順序,可以重復(fù)。List容器中的元素都對(duì)應(yīng)一個(gè)整型序號(hào)記載著其在容器中的位置。J2SDK API中所提供的List容器類有ArrayList和LinkList等。
9、常用方法:
void sort(List):對(duì)List中的元素進(jìn)行排序
void shuffle(List):對(duì)List中的元素進(jìn)行隨機(jī)排序
void reverse(List):對(duì)List中的元素進(jìn)行逆襲排序
void fill(List, Object):用一個(gè)特定的對(duì)象重寫List容器
void copy(List dest, List src):將src容器中的元素拷貝到dest容器中
int binarySearch(List, Object):對(duì)順序的List容器,采用折半查找法尋找特定的對(duì)象
public class test { /** * @param List接口 */ public static void main(String[] args) { List l1 = new LinkedList(); List l2 = new LinkedList(); for(int i=0; i<5; i++){ l1.add(i+1); } for(int i=0; i<5; i++){ l1.add('a'); } System.out.println(l1);//原始順序 Collections.shuffle(l1);//隨機(jī)排序 System.out.println(l1); Collections.reverse(l1);//倒序排序 System.out.println(l1); Collections.sort(l1);//排序 System.out.println(l1); System.out.println(Collections.binarySearch(l1, 3));//折半查找 Collections.copy(l2, l1);//拷貝 System.out.println(l2); }}10、Comparable接口:
List容器中的元素可以進(jìn)行排序,那么它是根據(jù)什么進(jìn)行的排序呢?所有可以進(jìn)行排序的類都實(shí)現(xiàn)了java.lang.Comparable接口,Comparable接口只有一個(gè)方法:public int CompareTo(Object obj);方法。返回值:0代表this==obj;正數(shù)代表this>obj;負(fù)數(shù)代表this<obj。實(shí)現(xiàn)了Comparable接口的類通過(guò)實(shí)現(xiàn)CompareTo方法從而定義該類對(duì)象的排序方法。對(duì)姓名排序的例子:
public class Name implements Comparable{ /** * @param Comparable接口 */ private String lastName; private String fastName; public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getFastName() { return fastName; } public void setFastName(String fastName) { this.fastName = fastName; } public int compareTo(Object arg0) { Name name = (Name)arg0; int lastCmp = lastName.compareTo(name.lastName); return (lastCmp!=0 ? lastCmp : fastName.compareTo(name.fastName)); }}11、Map接口:
實(shí)現(xiàn)了Map接口的類用來(lái)存儲(chǔ)鍵--值對(duì),Map中存儲(chǔ)的值通過(guò)鍵來(lái)標(biāo)識(shí),故而Map中的鍵不能重復(fù)。
12、Map常用方法:
Object put(Object key, Object value):添加元素
Object get(Object key):取出鍵值key對(duì)應(yīng)的value值
Object remove(Object key):移除鍵值key對(duì)應(yīng)的value值
boolean containsKey(Object key):判斷Map容器中是否存在鍵值key
boolean containsValue(Object value):判斷Map容器中是否存在value值
int size():返回Map容器的長(zhǎng)度
boolean isEmpty():判斷Map容器是否為空
void clear():清空Map容器
對(duì)于JAVA容器這一章就總結(jié)到這里,對(duì)于自動(dòng)打包和解包、泛型,由于文字描述的局限,就不再這里討論了,如果你有好的理解,還望留言討論。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注