版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單元九集合集合的概述Collection集合List集合Set集合Map集合泛型Java集合可以在程序設(shè)計中實現(xiàn)傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu),是一個用來存儲對象的容器,也就是說集合中只能存儲對象,如果向集合中加入基本類型數(shù)據(jù),系統(tǒng)會將其自動裝箱后存入集合。集合可存儲不同數(shù)據(jù)類型元素,集合的長度可改變。本單元的學(xué)習(xí)目標(biāo)如下。單元九集合教學(xué)目標(biāo)知識目標(biāo):技能目標(biāo):素養(yǎng)目標(biāo):掌握常用集合類的功能熟悉List集合、Set集合和Map集合的區(qū)別掌握集合遍歷的方法能夠恰當(dāng)運用Java集合能夠正確Java集合的相關(guān)類能夠獨立完成拓展任務(wù)懂得只有功夫深,鐵杵磨成針的道理明白擁有怎樣的認知,就會擁有怎樣的財富的意義掌握集合中泛型的使用9.1知識儲備–集合的概述Java集合也稱為容器,用來在java.util包下存儲Java類的對象。某一個對象一旦被放入集合,其類的信息將丟失,也就是說集合內(nèi)存儲的對象都是Object類型的。Object類是所有類的父類,因此,集合可存儲任意類型的對象,這一特點同時也會帶來不便,如當(dāng)獲取集合中元素時,需要使用強制類型轉(zhuǎn)換將其類型轉(zhuǎn)換為指定的數(shù)據(jù)類型。9.1.1集體的概述Java集合分為Collection集合(單列集合)和Map集合(雙列集合)。Collection集合為根接口,常用的子接口有List集合、Queue集合和Set集合,List集合常用的實現(xiàn)類有ArrayList集合和LinkedList集合,Set集合常用的實現(xiàn)類有HashSet集合和TreeSet集合。Map集合常用的實現(xiàn)類有HashMap集合和TreeMap集合,HashMap集合常用的子類有LinkedHashMap集合。集合的繼承關(guān)系如圖9-1所示。Collection集合(單列集合)Map集合(雙列集合)List集合Set集合ArrayList實現(xiàn)類LinkedList實現(xiàn)類HashSet實現(xiàn)類TreeSet實現(xiàn)類HashMap實現(xiàn)類TreeMap實現(xiàn)類LinkedHashMap子類9.1.1集體的概述Java中的數(shù)組可以保存多個數(shù)據(jù)元素,且數(shù)組元素類型必須相同,數(shù)組長度不能改變,但在實際應(yīng)用中很多情況下,元素類型及元素的個數(shù)無法確定,集合的誕生可以解決此類問題,集合的長度可變,集合元素的數(shù)據(jù)類型可不相同。Java的集合在java.util包下,用來存儲Java類的對象。某一個對象一旦被放入集合,其類的信息將丟失,也就是說集合內(nèi)存儲的對象都是Object類型對象,Object類是所有類的父類,因此,集合中可容納任意類型的對象,這一特點同時也會帶來不便,當(dāng)獲取集合中元素時,需要使用強制類型轉(zhuǎn)換將其轉(zhuǎn)換為指定的數(shù)據(jù)類型。9.1.1集體的概述9.1知識儲備–Collection集合
List集合Queue集合
Set集合Collection集合是單列集合的根接口,用于存儲一系列符合某種規(guī)則的元素,其子接口有List集合、Queue集合和Set集合。List集合的特點是元素有序且可重復(fù),Queue集合的特點是隊列先進先出,Set集合的特點是元素?zé)o序且不可重復(fù)。我們重點學(xué)習(xí)List集合和Set集合。Collection集合定義了一些常用的方法,通過這些方法可以實現(xiàn)對集合的基本操作,Collection集合常用方法如表9-1所示。9.1.2Collection集合方法聲明方法描述booleanadd(Ee)向集合中添加一個元素booleanaddAll(Collectionc)將指定集合中的所有元素添加到集合中voidclear()清除集合中所有元素booleancontains(Objecto)判斷集合中是否存在指定元素booleancontainsAll(Collectionc)判斷集合中是否包含集合c中的所有元素booleanisEmpty()判斷集合是否為空Iterator<E>iterator()返回一個Iterator對象,用于遍歷集合中的元素booleanremove(Objecto)從集合中刪除第一個符合條件的元素booleanremoveAll(Collectionc)從集合中刪除所有集合c的元素intsize()返回集合中元素的個數(shù)表9-1Collection集合常用方法9.1.2Collection集合9.1知識儲備–List集合
ArrayList類LinkedList類List集合繼承了Collection集合,List集合可以對集合中的每個元素進行精確的控制,根據(jù)元素的索引來獲取元素的值。List集合中的元素是有序的,即添加和刪除元素的順序是相同的;List集合中的元素是可重復(fù)的,即可同時出現(xiàn)多個相同的元素,通過索引來訪問指定位置的元素。List集合默認按元素的添加順序設(shè)置元素的索引,第一個添加到List集合中的元素的索引為0,第二個索引為1,依此類推。List集合除了繼承Collection集合的方法外,還添加了一些根據(jù)索引操作元素的方法,List集合常用方法如表9-2所示。9.1.3List集合9.1.3List集合方法聲明方法描述voidadd(intindex,Eelement)在集合中指定的位置上插入指定的元素booleanaddAll(Collectionc)追加指定集合的所有元素到該集合的末尾booleanaddAll(intindex,Collectionc)將指定集合中的所有元素插入到該集合指定位置voidclear()從集合中移除所有的元素Objectget(intindex)返回此集合中指定位置的元素intindexOf(Objecto)返回集合中指定元素的第一個出現(xiàn)的索引值,如果指定元素不存在,返回-1。intlastIndexOf(Objecto)返回集合中指定元素的最后一次出現(xiàn)的索引值,如果指定元素不存在,返回-1。ListsubList(intfromIndex,inttoIndex)返回一個從索引fromIndex(包含)到索引toIndex(不包含)所有元素組成的子集合表9-2List集合常用方法List集合除了繼承Collection集合的方法外,還添加了一些根據(jù)索引操作集合元素的方法,常用List集合方法見表9-2。List集合常用的實現(xiàn)類有ArrayList集合和LinkedList集合。1.ArrayList集合ArrayList集合內(nèi)部封裝了可變長度的數(shù)組對象,當(dāng)添加的元素長度超過默認長度時,ArrayList集合會在內(nèi)存中分配一個長度更長的數(shù)組來存儲這些元素。ArrayList集合提供3個常用構(gòu)造方法,如表9-3所示。9.1.3List集合構(gòu)造方法聲明構(gòu)造方法描述ArrayList()構(gòu)造一個初始化容量為10的空列表ArrayList(Collectionc)構(gòu)造一個包含指定collection元素的列表ArrayList(intinitialCapacity)構(gòu)造一個指定初始容量的空列表ArrayList提供3個構(gòu)造方法,見表9-3。表9-3ArrayList集合構(gòu)造方法ArrayList的方法大部分是從List集合和Collection集合繼承而來,通過這些方法可以實現(xiàn)對集合元素的添加、刪除、修改和獲取等操作。9.1.3List集合【例9-1】使用ArrayList向集合中添加三名學(xué)生信息,包括學(xué)號、性別和姓名,然后遍歷集合輸出這些學(xué)生信息。操作步驟:(1)新建unit09工程,在工程unit09的src目錄下創(chuàng)建包.cvit.list,在包.cvit.list下創(chuàng)建類Student。(2)在Student.java文件中,定義成員變量,分別為id(學(xué)號),name(姓名)和gender(性別),創(chuàng)建無參構(gòu)造方法和有參構(gòu)造方法,重寫toString方法,Student.java文件代碼如下:9.1.3List集合package.cvit.list;
/**
*Student類
*/
publicclassStudent{
privateStringid;
privateStringname;
privateStringgender;
publicStudent(){
}
publicStudent(Stringid,Stringname,Stringgender){
this.id=id;
this.name=name;
this.gender=gender;
}……
……
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetGender(){
returngender;
}
publicvoidsetGender(Stringgender){
this.gender=gender;
}
@Override
publicStringtoString(){
return"學(xué)號:"+id+",姓名:"+name+",性別:"+gender;
}
}Student.java文件代碼:9.1.3List集合(3)在.cvit.list包下創(chuàng)建測試類ArrayListDemo。在ArrayListDemo.java文件中,定義main()方法,在main()方法中實例化ArrayList對象,分別向ArrayList對象添加3個學(xué)生對象,遍歷輸出ArrayList對象中所有元素,ArrayListDemo.java文件代碼如下:9.1.3List集合package.cvit.list;
importjava.util.ArrayList;
/**
*ArrayList集合
*/
publicclassArrayListDemo{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
//實例化ArrayList對象
list.add(newStudent("001","Tony","男"));
//向ArrayList對象中添加3個學(xué)生對象元素
list.add(newStudent("002","Alice","女"));
list.add(newStudent("003","Rose","女"));
for(inti=0;i<list.size();i++){
//遍歷ArrayList對象,輸出3個學(xué)生基本信息
System.out.println(list.get(i));
}
}
}ArrayListDemo.java文件代碼:9.1.3List集合(4)在文本編輯器視圖中,單擊運行“”按鈕,運行結(jié)果如圖9-2所示。9.1.3List集合提示:可以向ArrayList對象中添加重復(fù)的數(shù)據(jù),也可以添加其它類型數(shù)據(jù)。集合元素的索引號從0到集合的大小減1。ArrayList集合在使用時需要導(dǎo)入java.util.ArrayList包,在IDEA中,快速導(dǎo)包的方法就是將光標(biāo)移至ArrayList上,按照系統(tǒng)提示,按Alt+Enter鍵即,如圖9-3所示。9.1.3List集合2.LinkedList類ArrayList類內(nèi)部封裝的是可變長數(shù)組,可快速搜索指定元素,在文件尾部添加和刪除元素速度也比較快,但是,在任意位置插入和刪除元素速度相對較慢,List集合的另外一個實現(xiàn)類LinkedList可以彌補ArryaList的不足。LinkedList類采用鏈表結(jié)構(gòu)保存對象,占用的內(nèi)存空間比較大,其優(yōu)點是便于向集合中插入或者刪除元素。如果需要頻繁向集合中插入和刪除元素時,選擇LinkedList類,其效率遠高于ArrayList類,但是LinkedList類隨機訪問元素的速度相對較慢,因此,如果需要大量訪問集合元素時,可選用ArrayList類。9.1.3List集合LinkedList類提供了2個構(gòu)造方法,見表9-4。表9-4LinkedList類構(gòu)造方法構(gòu)造方法聲明構(gòu)造方法描述LinkedList()構(gòu)造一個LinkedList的空列表LinkedList(Collectionc)構(gòu)造一個包含指定collection元素的列表9.1.3List集合LinkedList類除了繼承了List集合和Collection集合的方法外,還提供了一些特有的方法,見表9-5。表9-5LinkedList類常用方法方法聲明方法描述voidaddFirst(Ee) 將指定元素添加到集合的開頭voidaddLast(Ee) 將指定元素添加到集合的末尾ObjectgetFirst() 返回集合的第一個元素ObjectgetLast() 返回集合的最后一個元素ObjectremoveFirst()刪除集合中的第一個元素ObjectremoveLast()刪除集合中的最后一個元素9.1.3List集合【例9-2】使用LinkedList類向集合添加不同種類面包的銷售排名,并按照銷售額排名,輸出第一名和最后一名。操作步驟:(1)在包.cvit.list下創(chuàng)建類LinkedListDemo。(2)在LinkedListDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.3List集合9.1.3List集合package.cvit.list;
importjava.util.LinkedList;
/**
*LinkedList集合
*/
publicclassLinkedListDemo{
publicstaticvoidmain(String[]args){
LinkedListlink=newLinkedList();
//實例化LinkedList集合對象
link.add("豆沙面包");
link.add("椰蓉面包");
link.add("全麥低糖面包");
link.add("提子面包");
link.addFirst("老式雜糧面包");
//向集合插入第一個元素
System.out.println("所有種類面包銷售排名:");
for(inti=0;i<link.size();i++){
//遍歷集合
System.out.print(link.get(i)+"");
}
System.out.println("\n銷售排名第一的面包:"+link.getFirst());
System.out.println("銷售排名最后的面包:"+link.getLast());
}
}(4)在文本編輯器視圖中,單擊運行“”按鈕,運行結(jié)果如圖9-4所示。9.1.3List集合提示:通過LinkedList特有的方法,可以快速地添加、修改、刪除第一個元素和最后一個元素。LinkedList的元素是有序的,可重復(fù)的。9.1知識儲備–Iterator接口
Iterator常用方法Iterator的應(yīng)用Iterator接口是Java迭代器,用于遍歷集合,Iterator不是集合,是用于訪問集合的方法。Iterator對象的使用依賴于集合對象,可通過集合對象的iterator()方法來獲取Iterator對象。Iterator接口常用方法見表9-6。表9-6Iterator接口常用方法方法聲明方法描述booleanhasNext()如果被迭代的集合還有下一個元素,則返回trueObjectnext()返回迭代中的下一個元素defaultvoidremove()刪除集合中上一個next()方法返回的元素9.1.4Iterator接口【例9-3】編寫一個程序,使用Iterator遍歷集合。操作步驟:(1)在工程的src目錄下創(chuàng)建包.cvit.iterator,在.cvit.iterator包下創(chuàng)建類IteratorDemo。(2)在IteratorDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.4Iterator接口package.cvit.iterator;
importjava.util.ArrayList;
importjava.util.Iterator;
/**
*Iterator遍歷集合
*/
publicclassIteratorDemo{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
//實例化一個ArrayList集合對象
list.add("byte");
//分別向集合添加Java基本數(shù)據(jù)類型說明符
list.add("short");
list.add("int");
list.add("long");
list.add("char");
list.add("float");
list.add("double");
list.add("boolean");
Iteratorit=list.iterator();
//通過集合對象的iterator()方法獲取Iterator對象
System.out.println("Java基本數(shù)據(jù)類型說明符如下:");
while(it.hasNext()){
//遍歷集合,hasNext()方法--判斷集合是否有下一個元素
Objectobj=it.next();
//next()方法--獲取集合中下一個元素
System.out.print(obj+"");
}
}
}9.1.4Iterator接口(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-5所示。
提示:Iterator接口屬于集合中的一員,只能用于遍歷集合,不能集合之外的其它地方。Iterator接口遍歷集合時,while循環(huán)條件是Iterator對象的hasNext(),直到集合中沒有下一個元素,結(jié)束循環(huán)。9.1.4Iterator接口9.1.4Iterator接口【例9-4】使用Iterator迭代器刪除集合元素。操作步驟:(1)在包.cvit.iterator下創(chuàng)建類IteratorRemove。(2)在IteratorRemove.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:/**
*通過Iterator對象刪除集合元素
*/
publicclassIteratorRemove{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
//實例化一個ArrayList集合對象
list.add("byte");
//分別向集合添加Java基本數(shù)據(jù)類型說明符
list.add("short");
list.add("int");
list.add("long");
list.add("char");
list.add("float");
list.add("double");
list.add("boolean");
Iteratorit=list.iterator();
//通過集合對象的iterator()方法獲取Iterator對象
while(it.hasNext()){
//使用Iterator迭代器遍歷集合
Stringobj=(String)it.next();
if("short".equals(obj)){
//判斷集合元素是否為short,是使用remove()方法刪除該元素
it.remove();
}
}
System.out.println("Java基本數(shù)據(jù)類型說明符(除short之外)如下:");
System.out.print(list);
}
}9.1.4Iterator接口(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-6所示。
提示:Iterator對象刪除集合元素后,需要再遍歷輸出,才能看出效果。直接輸出集合對象時,輸出的所有集合元素用方括號括起來。9.1.4Iterator接口9.1知識儲備–foreach循環(huán)
foreach循環(huán)格式
foreach循環(huán)的應(yīng)用雖然通過for循環(huán)和Iterator迭代器都可以遍歷集合,但相對比較繁瑣,foreach循環(huán)也稱為增強for循環(huán),可以更簡單地實現(xiàn)集合遍歷。foreach循環(huán)不僅可以遍歷集合,還可以遍歷數(shù)組。foreach循環(huán)的一般格式:for(容器中元素類型臨時變量:容器變量){
代碼塊}其中,容器可以是數(shù)組,也可以是集合,臨時變量代表容器元素,容器變量是數(shù)組對象或者集合對象。9.1.5foreach循環(huán)【例9-5】編寫程序,使用foreach遍歷集合。操作步驟:(1)在工程的src目錄下創(chuàng)建包.cvit.foreach,在包.cvit.foreach下創(chuàng)建類ForeachDemo。(2)在ForeachDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.5foreach循環(huán)package.cvit.foreach;
importjava.util.ArrayList;
/**
*foreach循環(huán)遍歷集合
*/
publicclassForeachDemo{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
list.add("Tony");
list.add("Alice");
list.add("Tom");
System.out.print("集合元素有:");
//foreach遍歷集合,Object--集合元素類型,O--集合元素變量,list--集合變量
for(Objecto:list){
System.out.print(o+"\t");
}
}
}
9.1.5foreach循環(huán)(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-7所示。
提示:在IDEA中,快速書寫foreach的方法輸入iter加回車鍵,或者iter加tab鍵。
foreach循環(huán)遍歷集合時,只能訪問集合中的元素,不能刪除集合元素。9.1.5foreach循環(huán)9.1知識儲備–Set集合
HashSet類TreeSet類Set集合同樣繼承了Collection集合,Set集合中的元素?zé)o序、不重復(fù),且最多只能包含一個null元素,Set集合的常用實現(xiàn)類有HashSet和TreeSet。Set集合的常用方法與Collection集合基本相同。1. HashSet類HashSet是Set集合的典型實現(xiàn)類,HashSet是按照Hash算法來存儲集合元素,具有很好的存取和查找性能。當(dāng)向HashSet集合中存入一個元素時,HashSet將調(diào)用該對象的hashCode()方法來得到對象的hashCode值,根據(jù)hashCode值決定該對象的存儲位置。在HashSet集合中,若兩個對象的hashCode值相等且通過equals()方法比較返回結(jié)果為true,則HashSet集合認為兩個元素相等。9.1.6Set集合HashSet集合常用構(gòu)造方法見表9-7。表9-7HashSet集合構(gòu)造方法構(gòu)造方法聲明構(gòu)造方法描述HashSet()構(gòu)造一個HashSet集合HashSet(Collectionc)構(gòu)造一個包含指定collection集合對象的列表9.1.6Set集合【例9-7】使用HashSet集合類向集合中添加4句描寫春夏秋冬的詩句,并使用Iterator接口實現(xiàn)集合遍歷。操作步驟:(1)在工程的src目錄下創(chuàng)建包.cvit.set,在包.cvit.set下創(chuàng)建類HashSetDemo。(2)在HashSetDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.6Set集合package.cvit.set;
importjava.util.HashSet;
importjava.util.Iterator;
/**
*HashSet集合
*/
publicclassHashSetDemo{
publicstaticvoidmain(String[]args){
HashSetpoems=newHashSet();
//實例化HashSet集合對象
poems.add("好雨知時節(jié),當(dāng)春乃發(fā)生。");
//向集合對象添加元素
poems.add("首夏猶清和,芳草亦未歇。");
poems.add("空山新雨后,天氣晚來秋。");
poems.add("冬盡今宵促,年開明日長。");
poems.add("通過詩句可以看出,一年四季分明!!!");
Iteratorit=poems.iterator();
//獲取Iterator迭代器對象
System.out.println("描寫春夏秋冬的詩句:");
while(it.hasNext()){
//遍歷集合并輸出
Stringmovie=(String)it.next();
//將獲取的Object元素強制轉(zhuǎn)換為String類型
System.out.print(movie+"\t");
}
}
}9.1.6Set集合(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-8所示。
提示:HashSet類添加元素順序與遍歷輸出元素順序不同。Iterator集合可用于所有集合遍歷。如果向HashSet集合類添加兩個相同的元素,只保留最后一次添加的元素,前面相同的元素將被覆蓋。9.1.6Set集合2. TreeSet類TreeSet是Set集合的實現(xiàn)類之一,TreeSet類還實現(xiàn)了SortedSet集合,SortedSet集合是Set的子集合,實現(xiàn)了對集合的升序排序。TreeSet類實現(xiàn)了Comparable集合,Comparable集合提供了一個intcompareTo(Objectobj)方法用于比較兩個對象的大小,如果兩個對象相同,返回0;如果該對象大于指定對象,返回正整數(shù);如果該對象小于指定對象,返回負整數(shù)。9.1.6Set集合實現(xiàn)Comparable集合類對象的比較方式見表9-8。表9-8實現(xiàn)Comparable集合類對象的比較方式類名比較方式數(shù)值類型包裝類(BigDecimal、Biglnteger、Byte、Double、Float、Integer、Long及Short)按數(shù)值大小比較Character按字符的Unicode值的數(shù)字大小比較String按字符串中字符的Unicode值的數(shù)字大小比較TreeSet類除了實現(xiàn)了Collection集合的方法外,還有一些特有的方法見表9-9。表9-9TreeSet類的常用方法方法聲明方法描述Objectfirst()返回集合中的第一個元素Objectlast()返回集合中的最后一個元素ObjectpoolFirst()移除集合中的第一個元素ObjectpoolLast()移除集合中的最后一個元素9.1.6Set集合【例9-6】通過TreeSet錄入5名學(xué)生Java成績,并將成績升序排序輸出,同時輸出第一名和最后一名成績。操作步驟:(1)在包.cvit.set下創(chuàng)建類TreeSetDemo。(2)在TreeSetDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.6Set集合package.cvit.set;
importjava.util.Scanner;
importjava.util.TreeSet;
/**
*TreeSet集合
*/
publicclassTreeSetDemo{
publicstaticvoidmain(String[]args){
TreeSetscores=newTreeSet();
//實例化TreeSet對象
Scannersc=newScanner(System.in);
//實例化Scanner對象
for(inti=1;i<=5;i++){
//循環(huán)輸入5名同學(xué)成績
System.out.print("請輸入第"+i+"名同學(xué)的Java成績:");
scores.add(sc.nextInt());
}
System.out.print("由低到高排名后的5名同學(xué)成績:");
System.out.println(scores);
//輸出集合內(nèi)容
//分別輸出集合中最后一個元素和第一個元素
System.out.println("本次Java測試中最高分為:"+scores.last());
System.out.print("本次Java測試中最低分為:"+scores.first());
}
}9.1.6Set集合(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-9所示。
提示:
TreeSet集合類默認排序為升序。如果單純輸出集合所有元素,在輸出項中直接給出集合對象名稱即可。9.1.6Set集合9.1知識儲備–Map集合
HashMap類TreeMap類雙列集合Map用于存儲具有映射關(guān)系的數(shù)據(jù)。Map集合中的元素以鍵值對(key-value)形式存儲,即一個鍵對象(key)對應(yīng)一個值對象(value),鍵對象不能相同,值對象可以相同,即同一個Map對象中的任意兩個鍵對象通過equals()方法比較總是返回false。Map集合中的鍵對象和值對象之間存在單向一對一關(guān)系,即通過指定的鍵對象,總能找到唯一的、確定的值對象。9.1.7Map集合Map集合提供了大量的方法,常用的方法見表9-10。表9-10Map集合常用方法方法聲明方法描述voidclear()刪除Map集合中的所有鍵-值對Objectput(Kkey,Vvalue)把指定的鍵和值添加到Map集合中Objectget(Objectkey)返回Map集合中指定鍵對象所對應(yīng)的值Objectremove(Objectkey)刪除指定鍵對應(yīng)的集合元素,返回被刪除元素的值Booleanremove(Objectkey,Objectvalue)刪除指定鍵和值的集合元素booleancontainKey(Objectkey)判斷集合中是否有指定鍵Set<K>keySet()獲取Map集合中所有的鍵,存儲到Set集合中Set<Map.Entry<K,V>>entrySet()獲取Map集合中所有鍵值對對象的Set集合booleanisEmpty()查詢該Map集合是否為空intsize()返回Map集合元素的個數(shù)Collectionvalues()返回Map集合中所有值組成的Collection集合9.1.7Map集合Map集合常用實現(xiàn)類有HashMap集合和TreeMap集合,HashMap集合按照Hash算法來存儲元素,而TreeMap集合按照鍵對象對元素進行排序。1.HashMap集合HashMap集合是Map集合常用實現(xiàn)類,HashMap集合根據(jù)鍵對象的hashCode值存儲元素,根據(jù)鍵對象直接獲取值對象,具有很快的獲取速度。HashMap集合中的鍵對象和值對象是無序的,鍵對象不可重復(fù),值對象可以重復(fù),最多只允許一個集合元素的鍵對象為null,允許多個集合元素的值對象為null。HashMap集合常用構(gòu)造方法如表9-11所示。表9-10Map集合常用方法構(gòu)造方法聲明構(gòu)造方法描述HashMap()構(gòu)造一個HashMap集合HashMap(intinitialCapacity)構(gòu)造一個指定初始容量的HashMap集合9.1.7Map集合【例9-7】使用HashSet存儲3名同學(xué)的學(xué)號和姓名信息,并遍歷輸出學(xué)號和姓名鍵值對。操作步驟:(1)在工程的src目錄下創(chuàng)建包.cvit.map,在包.cvit.map下創(chuàng)建類HashMapDemo。(2)在HashMapDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.7Map集合package.cvit.map;
importjava.util.HashMap;
importjava.util.Set;
/**
*HashMap集合
*/
publicclassHashMapDemo{
publicstaticvoidmain(String[]args){
HashMapmap=newHashMap();
//實例化HashMap集合對象
map.put("22571301","周全");
//向集合添加3個鍵值對元素
map.put("22571302","趙楠");
map.put("22571303","鄭旭");
Setkeys=map.keySet();
//通過集合的keySet()方法獲取所有的鍵對象
System.out.println("學(xué)生信息Map遍歷結(jié)果如下:");
for(Objectkey:keys){
//遍歷鍵set集合
System.out.println(key+":"+map.get(key));
//通過集合get(key)方法獲取鍵對應(yīng)的值
}
}
}9.1.7Map集合(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-10所示。
提示:HashSet遍歷的結(jié)果與添加元素的順序不同。通過Map集合的keySet()方法獲取鍵,再通過Map集合的get(key)方法獲取鍵對應(yīng)的值。9.1.7Map集合【例9-8】利用Map集合的entrySet()方法遍歷集合。操作步驟:(1)在包.cvit.map下創(chuàng)建類EntrySetDemo。(2)在EntrySetDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.7Map集合package.cvit.map;
importjava.util.HashMap;
importjava.util*;
/**
*entrySet()遍歷Map集合
*/
publicclassEntrySetDemo{
publicstaticvoidmain(String[]args){
HashMapmap=newHashMap();
//實例化HashMap對象
map.put("百度","/");
//向HashMap集合對象添加元素
map.put("淘寶","/");
Setset=map.entrySet();
//通過entrySet()獲取鍵值對的set集合
Iteratorit=set.iterator();
//獲取set集合的迭代器對象
while(it.hasNext()){
//循環(huán)遍歷set集合
Map.Entryentry=(Map.Entry)it.next();
//獲取set集合中的下一個元素,并強轉(zhuǎn)為Map.Entry類型
Objectkey=entry.getKey();
//通過entry對象的getKey()方法獲取HashMap集合的鍵
Objectvalue=entry.getValue();
//通過entry對象的getValue()方法獲取HashMap集合的值
System.out.println(key+":"+value);
}
}
}9.1.7Map集合(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-11所示。
提示:Map.Entry是Map的一個內(nèi)部集合,它表示Map中的一個實體(鍵值對),集合中有g(shù)etKey()和getValue()方法,分別獲取Map中的鍵和值。Map中的entrySet()方法返回一個Set對象,此對象的類型為Map.Entry。9.1.7Map集合2. TreeMap類TreeMap類是Map集合的實現(xiàn)類,它的底層與TreeSet相同,因此,可以對集合元素排序且不可重復(fù)。【例9-9】通過TreeMap添加多個元素,整型鍵,字符串型值,并遍歷輸出集合所有元素。操作步驟:(1)在包.cvit.map下創(chuàng)建類TreeMapDemo。(2)在TreeMapDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.7Map集合package.cvit.map;
importjava.util.*;
/**
*TreeMap集合
*/
publicclassTreeMapDemo{
publicstaticvoidmain(String[]args){
TreeMapmap=newTreeMap();
//實例化TreeMap集合對象
//向集合添加多個順序無規(guī)律的元素,包括重復(fù)鍵的元素
map.put(5,"Tony");
map.put(2,"Alice");
map.put(1,"Tom");
map.put(3,"Adam");
map.put(4,"Joanne");
map.put(1,"Jack");
Setset=map.keySet();
//獲取TreeMap集合對象所有鍵的set集合
Iteratorit=set.iterator();
System.out.println("遍歷TreeMap集合所有元素如下:");
while(it.hasNext()){
Objectkey=it.next();
Objectvalue=map.get(key);
System.out.print(key+":"+value+"");
}
}
}9.1.7Map集合(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-12所示。
提示:TreeMap遍歷排序后的數(shù)據(jù)。本例中添加了兩個鍵為1的元素,第2個覆蓋了第一個,說明TreeMap無重復(fù)元素。9.1.7Map集合9.1知識儲備–泛型泛型類泛型接口泛型方法Java中的集合可以存儲任何類型對象,對象存入集合后,其類型信息將丟失,獲取到的元素均為Object類型。這種設(shè)計會帶來兩個問題,一是同一個集合中可能會有多不同類型的元素,例如創(chuàng)建一個保存Student對象的集合中,同樣可以將Teacher類對象“丟”進去,這樣易出現(xiàn)異常;二是在獲取集合元素時,需要通過強制類型轉(zhuǎn)換將元素還原為最初類型,這些強制類型轉(zhuǎn)換增加了程序的復(fù)雜度,同時容易引起類型轉(zhuǎn)換異常。為了解決這些隱患,Java1.5之后Java提供了泛型,泛型可以在編譯的時候檢查類型安全,并且所有的強制轉(zhuǎn)換都是自動和隱式的,提高了代碼的重用率。泛型的本質(zhì)是參數(shù)化類型,也就是給類型指定一個參數(shù),然后在使用時再指定此參數(shù)具體的值,這樣類型就可以在使用時決定了。這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法。9.1.8泛型1.泛型類泛型類是一種可以接受任意類型參數(shù)的類。泛型類定義的一般格式:publicclass類名<T>T為泛型類型,可以是任意引用類型,亦可以有多個,多個類型之間用逗號分隔。定義好泛型后,需要創(chuàng)建泛型對象,創(chuàng)建泛型對象的一般格式:類名稱<T>對象名稱=new類名稱<T>();例如:ArrayList<Integer>list=newArrayList<Integer>();其中,list對象元素泛型參數(shù)為整型,若存入其它類型元素,編譯將報錯。9.1.8泛型2.泛型接口泛型接口是一種可以接受任意類型參數(shù)的接口。泛型接口定義的一般格式:publicinterface接口名<T>3.泛型方法泛型方法是在調(diào)用方法的時候指明泛型的具體類型,泛型方法定義的一般格式:public<T>返回值類型方法名稱(Tt){
方法體代碼塊}其中,形參數(shù)據(jù)類型為指定的泛型。9.1.8泛型【例9-10】創(chuàng)建一個ArrayList,要求使用泛型限定集合元素類型為Student。操作步驟:(1)在工程的src目錄下創(chuàng)建包.cvit.type,在包.cvit.type下創(chuàng)建類Student類。(2)Student.java文件中撰寫代碼如下:9.1.8泛型package.cvit.type;
/**
*Student學(xué)生類
*/
publicclassStudent{
privateStringid;//學(xué)號
privateStringname;//姓名
privatefloatscore;//成績
//創(chuàng)建有參構(gòu)造方法
publicStudent(Stringid,Stringname,floatscore){
this.id=id;
this.name=name;
this.score=score;
}
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
…………
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicfloatgetScore(){
returnscore;
}
publicvoidsetScore(floatscore){
this.score=score;
}
@Override
publicStringtoString(){//重寫toString()方法
return"Student{"+
"id='"+id+'\''+
",name='"+name+'\''+
",score="+score+
'}';
}
}9.1.8泛型package.cvit.type;
importjava.util.ArrayList;
/**
*泛型在List中的應(yīng)用
*/
publicclassListDemo{
publicstaticvoidmain(String[]args){
ArrayList<Student>list=newArrayList<Student>();
//將ArrayList集合的泛型參數(shù)設(shè)置為Student類
list.add(newStudent("0001","Tony",98.2f));
//分別向list集合中添加3名學(xué)生信息
list.add(newStudent("0002","Alice",76.5f));
list.add(newStudent("0003","Tom",88.6f));
for(Studentstudent:list){
//遍歷集合
System.out.println(student);
}
}
}(3)在包.cvit.type下創(chuàng)建測試類ListDemo。(4)在ListDemo.java文件中撰寫代碼如下:9.1.8泛型(4)在文本編輯器視圖中,單擊運行按鈕,運行結(jié)果如圖9-13所示。
提示:本例中的泛型類型為Student,需要注意在實例化ArrayList集合對象時,Student泛型參數(shù)出現(xiàn)的兩處位置。有了泛型的集合元素類型將被鎖定,不能添加其它類型到集合中。9.1.8泛型【例9-11】通過泛型參數(shù)的Map集合,將例9-10的Student類添加入TreeMap集合中。操作步驟:(1)在包.cvit.type下創(chuàng)建類MapDemo。(2)在MapDemo.java文件中,定義main()方法。(3)文本編輯器視圖中,撰寫代碼如下:9.1.8泛型package.cvit.type;
importjava.util.*;
/**
*泛型在Map中的應(yīng)用
*/
publicclassMapDemo{
publicstaticvoidmain(String[]args){
TreeMap<Integer,Student>map=newTr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度砂石料開采與環(huán)境保護合作協(xié)議3篇
- 二零二五年度個人消費分期貸款質(zhì)押擔(dān)保合同書2篇
- 2025版鐵路貨運特點與業(yè)務(wù)流程規(guī)范合同3篇
- 香煙店衛(wèi)生標(biāo)準(zhǔn)規(guī)范
- 二零二五年度高??蒲谐晒D(zhuǎn)化委托實施協(xié)議3篇
- 2025版環(huán)保設(shè)備維修與改造承包協(xié)議書2篇
- 二零二五版學(xué)生頂崗實習(xí)實習(xí)單位實習(xí)教育與培訓(xùn)合作協(xié)議3篇
- 二零二五年大學(xué)食堂食品安全保障協(xié)議范本3篇
- 二零二五版新風(fēng)機銷售與技術(shù)支持合作合同2篇
- 二零二五年度個人二手房交易房屋租賃續(xù)約合同
- 2025年病案編碼員資格證試題庫(含答案)
- 2025新譯林版英語七年級下單詞表
- 新疆2024年中考數(shù)學(xué)試卷(含答案)
- 魏寧海超買超賣指標(biāo)公式
- 2024-2030年中國連續(xù)性腎臟替代治療(CRRT)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- (正式版)FZ∕T 80014-2024 潔凈室服裝 通 用技術(shù)規(guī)范
- 跨學(xué)科主題學(xué)習(xí):實施策略、設(shè)計要素與評價方式(附案例)
- 場地委托授權(quán)
- 剪映專業(yè)版:PC端短視頻制作(全彩慕課版) 課件 第3章 短視頻剪輯快速入門
- 湖南省長沙市開福區(qū)青竹湖湘一外國語學(xué)校2023-2024學(xué)年九年級下學(xué)期一模歷史試題
- 2024年四川省成都市龍泉驛區(qū)中考數(shù)學(xué)二診試卷(含答案)
評論
0/150
提交評論