附:JAVA常用的進階資料類型——集合類型
一、JAVA語言中的集合類型主要有三種形式:Set(集)、List(列表)、Map(映射),每種類型的集合都包括三部分:介面、實現和演算法。
a)集合介面實現集合的操作和集合的具體功能實現細節的相互分離——Set介面、List
介面、Map介面
b)集合的具體功能實作類別實質上是各種可重用的資料結構的具體表示
List介面的實作類別有ArrayList、LinkedList、Stack和Vector等集合類,Vector類
提供了實現可增長數組的功能,隨著更多元素加入其中,數組變的更大。在刪除
一些元素之後,數組變小。
Set介面的實作類別有HashSet、LinkedHashSet和TreeSet等集合類
Map介面的實作類別有HashMap、Hashtable、LinkedHashMap、Properties和
TreeMap等集合類。
c)集合的演算法指可以對實現集合介面的各個集合的功能實作類別提供如排序、尋找、交
換和置換等方面的功能實現。
二、List介面
1.List介面代表有序的集合,可以對List介面代表的有序集合中每個元素的插入位置進行精確地控制,並利用元素的整數索引(代表元素在集合中的位置)訪問元素中的各個成員,List介面代表的集合是允許出現重複元素的。
2.List介面主要成員方法:
1)voidadd(intindex,Eelement)在列表指定位置插入指定元素
2)Eget(intindex)返回結合中指定位置的元素
3)Eremove(intindex)移除集合中指定位置的元素
4)Eset(intindex,Eelment)用指定元素替換集合中指定位置的元素
5)boolean(o)向列表的尾部追加指定的元素
6)boolean(o)如果列表包含指定的元素,則返回true。
7)boolean()如果列表不包含元素,則返回true。
8)int()返回列表中的元素數
9)Iteratoriterator()返回以正確順序在列表的元素上進行迭代的迭代器。
3.List的實作類別
List在資料結構中分別表現為數組(ArrayList)、向量(Vector)、鏈表(LinkedList)、堆棧(Stack)和隊列等形式。
Vector集合和ArrayList集合都是採用數組形式來儲存對象,區別在於ArrayList集合本身不具有線程同步的特性,不能用在多線程的環境下,可以使用ArrayList集合能夠節省由於同步而產生的系統效能的開銷。而Vector集合實現了對線程同步的支援,因此在多線程並發訪問的應用環境下,該集合本身能夠保證自身具有執行緒安全性。在多線程的並發訪問中,可以將Vector集合的對象執行個體設計為類中的成員屬性,而應該將ArrayList集合的對象執行個體設計為局部對象。
publicclassUserInfo{
ListoneVector=newVector();
publicvoidexecute(){
ListoneArraylist=newArrayList();
}
}
4.example
importjava.util.ArrayList;importjava.util.List;publicclassListExample{
publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubListoneList=newArrayList();oneList.add("zhangsan");oneList.add("lisi");oneList.add(newInteger("1234"));//允許集合包含不同類型元素oneList.add("lisi");//允許集合包含相同元素System.out.print(oneList);
}}練習:建立一個教師類Teacher,其屬性有教師號no,姓名name,性別sex和薪水salary;再建立三個教師對象並賦值;用List介面的ArrayList實現來儲存教師對象,並輸出相應教師資訊。
三、Set介面
1.Set介面代表一個無序並且不允許元素重複存在的集合2.Set介面主要成員方法(o)如果set中尚未存在指定的元素,則添加此元素2)boolean(o)如果set中存在指定的元素,則將其移除。3)int()返回set中的元素數(其容量)4)boolean()如果set不包含元素,則返回true。
6)boolean(o)如果set包含指定的元素,則返回true。
7)Iterator()返回在此set中的元素上進行迭代的迭代器。
3.Set介面的實作類別1)booleanSet介面的實作類別有HashSet、LinkedHashSet和TressSet等集合類
HashSet集合中元素對象是以hashcode碼作為標識,所以放入的成員元素對象的內容是不能重複的;HashSet集合中元素對象是無序的——成員元素的儲存和添加時的順序並不完全一致。對於自訂的類型需要重寫hashcode()方法和equals()方法。
TreeSet集合:如果想對輸入的資料進行有序排列,則要使用TreeSet子類。這裡的有序是對象的大小順序,而不是對象插入到集合當中的順序。
LinkedHashSet是在HashSet的集合的基礎上添加了雙向鏈的支援。
4.example
importjava.util.HashSet;importjava.util.Set;publicclassHashSetDemo01{publicstaticvoidmain(String[]args){
SetallSet=newHashSet();
allSet.add("A");
allSet.add("B");
allSet.add("C");
allSet.add("C");//增加元素//增加元素//增加元素//重複元素,不能加入
allSet.add("C");
allSet.add("D");
allSet.add("E");System.out.println(allSet);
//輸出集合對象,調用toString()}
}//重複元素,不能加入//增加元素//增加元素
程式運行結果:[D,A,C,B,E]練習:建立一個教師類Teacher,其屬性有教師號no,姓名name,性別sex和薪水salary;再建立三個教師對象並賦值;用set集合來實現對教師對象的儲存,並輸出相應教師資訊。
三、Map介面1.Map中的每個成員元素是由一個關鍵字(Key)和一個值(value)構成的。該集合中成員元素的關鍵字不能重複,並且每個鍵只能與一個值相對應。
2.Map介面主要成員方法
1)V(key,value)將指定的值與此映射中的指定鍵關聯
2)V(key)如果存在一個鍵的映射關係,則將其從此映射中移除3)V(key)返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回null。
4)BooleanisEmpty()如果此映射未包含鍵-值對應關係,則返回true。5)int()返回此映射中的鍵-值對應關係數。
6)boolean(key)如果此映射包含指定鍵的映射關係,則返回true。
7)boolean(value)如果此映射將一個或多個鍵映射到指定值,則返回true。
3.Map介面的實作類別
Map介面的實作類別有HashMap、Hashtable、LinkedHashMap、Properties和TreeMap等集合類。
HashMap和HashTable區別於ArrayList和Vector類似,HashMap是採用非安全執行緒的方式設計的,效率上高於Hashtable集合。在多線程並發訪問的環境下應用Hashtable集合對象時不需要開發人員單獨為它的方法實現同步鎖定——因為Hashtable集合中的所有方法都是同步定義的方法。在多線程的並發訪問的應用環境中,開發人員可以將Hashtable集合的對象執行個體設計為類的成員屬性對象,應該將HashMap集合的對象執行個體設計為方法的局部對象。
publicclassUserInfo{
MaponeHashtable=newHashtable();
publicvoidexecute(){
MaponeHashMap=newHashMap();
……
}
}
4.exampleimportjava.util.HashMap;importjava.util.Map;publicclassMapExample{
publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubMapcityHashMap=newHashMap();cityHashMap.put("beijing","北京");cityHashMap.put(2,3);//允許集合中包括不同類型的關鍵字和值cityHashMap.put("nanchang","南昌");
名的元素
}System.out.print(cityHashMap);cityHashMap.put("nanchang","江西");//後面元素覆蓋前面相同鍵
}
四、迭代器Iterator
1.Iterator對集合進行迭代(遍曆)。2.Iterator常用的方法1)boolean()如果仍有元素可以迭代,則返回2)Enext()返回迭代的下一個元素
3.Example1.listl=newArrayList();
2.l.add("aa");
3.l.add("bb");
4.l.add("cc");true
5.for(Iteratoriter=l.iterator();iter.hasNext();){
6.
7.Stringstr=(String)iter.next();System.out.println(str);
8.}
9./*迭代器用於while迴圈
10.Iteratoriter=l.iterator();
11.while(iter.hasNext()){
12.Stringstr=(String)iter.next();
13.System.out.println(str);
14.}
15.*/
練習:使用迭代器輸出教師資訊 一起學習java的夥伴加java直播公開課思維交流群: 175161984 (←長按可複製)擷取學習資料可