Java程序設(shè)計(jì)與實(shí)踐(微課版)-課后習(xí)題及答案 第06章 集合框架 習(xí)題參考答案_第1頁(yè)
Java程序設(shè)計(jì)與實(shí)踐(微課版)-課后習(xí)題及答案 第06章 集合框架 習(xí)題參考答案_第2頁(yè)
Java程序設(shè)計(jì)與實(shí)踐(微課版)-課后習(xí)題及答案 第06章 集合框架 習(xí)題參考答案_第3頁(yè)
Java程序設(shè)計(jì)與實(shí)踐(微課版)-課后習(xí)題及答案 第06章 集合框架 習(xí)題參考答案_第4頁(yè)
Java程序設(shè)計(jì)與實(shí)踐(微課版)-課后習(xí)題及答案 第06章 集合框架 習(xí)題參考答案_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

思考與練習(xí)6.2List接口可以用哪些方式遍歷List實(shí)現(xiàn)類中的元素?答:普通for循環(huán),foreach循環(huán),使用迭代器Iterator。用戶電子郵箱有一個(gè)垃圾郵件過(guò)濾功能。當(dāng)檢測(cè)到疑似垃圾郵件的時(shí)候,就將其存儲(chǔ)起來(lái)。以備用戶查看、搜索(支持多種條件搜索)、移除、清空。有的時(shí)候垃圾郵件比較多,有的時(shí)候垃圾郵件比較少。請(qǐng)問(wèn)選擇什么樣的接口及其實(shí)現(xiàn)類更為合適?答:適合使用List接口的實(shí)現(xiàn)類。因?yàn)槠淇蓜?dòng)態(tài)擴(kuò)容,且支持contains、remove、clear等方法。6.3Set接口Set接口與List接口的主要區(qū)別是什么?Set接口有哪些常用的實(shí)現(xiàn)類?答:Set(元素存儲(chǔ)的無(wú)序性和唯一性)。TreeSet(基于紅黑樹(shù)實(shí)現(xiàn),確保元素處于排序狀態(tài)。注意:不是插入順序)與HashSet(基于哈希表實(shí)現(xiàn),可實(shí)現(xiàn)快速查找),LinkedHashSet維護(hù)了一個(gè)雙向鏈表來(lái)追蹤元素的順序,因此迭代時(shí)元素會(huì)按照它們被添加的順序返回?,F(xiàn)有集合A(1,3,5,7,9)、B(2,4,6,8,10)、C(1,4,6,7,11),查詢資料編寫(xiě)代碼求出A與B的并集,A與C的交集,A與C的差集答:Set<Integer>A=newHashSet<>(Set.of(1,3,5,7,9));Set<Integer>B=newHashSet<>(Set.of(2,4,6,8,10));Set<Integer>C=newHashSet<>(Set.of(1,4,6,7,11));//并集Set<Integer>unionAB=newHashSet<>(A);unionAB.addAll(B);System.out.println("A與B的并集:"+unionAB);//交集Set<Integer>intersectionAC=newHashSet<>(A);intersectionAC.retainAll(C);System.out.println("AandC的交集:"+intersectionAC);//差集Set<Integer>differenceAC=newHashSet<>(A);differenceAC.removeAll(C);System.out.println("A與C的差集:"+differenceAC);6.4隊(duì)列:Queue接口1.LinkedList實(shí)現(xiàn)了Queue接口,那么Queue集合是否可以作為雙端隊(duì)列使用,是否可以作為棧來(lái)使用?答:LinkedList實(shí)現(xiàn)了Queue接口與Deque,所以可以被作為雙端隊(duì)列使用。也可以被當(dāng)作棧使用。2.12306開(kāi)發(fā)了代客搶票功能。所有要搶某個(gè)車次的乘客被排到一個(gè)隊(duì)列中,當(dāng)該車次有余票時(shí),就從等待隊(duì)列的隊(duì)頭取出等待乘客幫其下單。請(qǐng)問(wèn)用什么接口及實(shí)現(xiàn)類?答:這是一個(gè)典型的使用先進(jìn)先出(FIFO)隊(duì)列的場(chǎng)景??梢允褂肣ueue接口,LinkedList實(shí)現(xiàn)類,如果要實(shí)現(xiàn)類似VIP客戶優(yōu)先的功能可以采用PriorityQueue。6.5映射:Map接口火車站只允許買票(根據(jù)刷身份證)的乘客進(jìn)入大廳。因?yàn)槿肆髁刻貏e大,因此需要查詢特別快。請(qǐng)問(wèn)使用什么接口及實(shí)現(xiàn)類?答:使用Map接口的HashMap類,身份證號(hào)作為key,個(gè)人信息作為value對(duì)一段英文文檔進(jìn)行詞頻統(tǒng)計(jì),并輸出頻率排名前10的單詞。答:將文檔中所有的標(biāo)點(diǎn)符號(hào)和特殊符號(hào)替換成空格,并將所有單詞變成小寫(xiě)形式,而后根據(jù)空格進(jìn)行分詞,得到所有單詞的集合。在對(duì)集合的元素進(jìn)行次數(shù)統(tǒng)計(jì),得到{單詞1=次數(shù)1,單詞2=次數(shù)2,單詞n=次數(shù)n}形式的HashMap對(duì)象,對(duì)HashMap對(duì)象中的元素,按值降序方式排序)importjava.util.*;publicclassOptimizedWordFrequencyCounter{publicstaticvoidmain(String[]args){Stringtext="YourinputEnglishdocumenthere.Thisisasampletextforwordfrequencycounting.Replacethiswithyouractualtext.";//把特殊字符轉(zhuǎn)換成空格text=text.replaceAll("[^a-zA-Z\\s]","").toLowerCase();//把文本分割成單詞String[]words=text.split("\\s+");//統(tǒng)計(jì)詞頻率Map<String,Integer>wordFrequency=newHashMap<>();for(Stringword:words){wordFrequency.put(word,wordFrequency.getOrDefault(word,0)+1);}//按頻率排序List<Map.Entry<String,Integer>>sortedList=newArrayList<>(wordFrequency.entrySet());sortedList.sort(Map.EparingByValue(Comparator.reverseOrder()));//輸出前10個(gè)單詞intcount=0;for(Map.Entry<String,Integer>entry:sortedList){if(count>=10){break;}System.out.println(entry.getKey()+":"+entry.getValue());count++;}}}6.8Java流式編程簡(jiǎn)介有List<Integer>numbers=Arrays.asList(5,12,3,8,15,9);,用Stream流式編程方法過(guò)濾和打印大于10的數(shù)字。numbers.stream()

.filter(num->num>10)

.forEach(System.out::println);有List<String>words=Arrays.asList("apple","banana","orange");,用Stream流式編程方法對(duì)字符串列表中的字符串轉(zhuǎn)換成大寫(xiě)后和收集為列表。List<String>upperCaseWords=words.stream()

.map(String::toUpperCase)

.collect(Collectors.toList());有List<Integer>scores=Arrays.asList(80,95,75,90,85);,用Stream流式編程方法計(jì)算列表scores中元素的平均值。doubleaverage=scores.stream()

.mapToInt(Integer::intValue)

.average()

.orElse(0);習(xí)題一、判斷題(對(duì))泛型是Java集合框架得以實(shí)現(xiàn)的一個(gè)重要基礎(chǔ)(錯(cuò))List代表列表,使用newList<String>();將創(chuàng)建一個(gè)包含String類型元素列表。(對(duì))Collection接口中包含contains方法,所以List、Set接口也必然包含contains。(對(duì))ArrayList的contains方法需要調(diào)用集合中對(duì)象的equals方法來(lái)實(shí)現(xiàn)。(錯(cuò))ArrayList、LinkedList可以包含基本數(shù)據(jù)類型數(shù)據(jù)。(錯(cuò))Queue<Integer>q=newQueue<>();可以創(chuàng)建一個(gè)包含Integer類型的隊(duì)列。(錯(cuò))任何引用數(shù)據(jù)類型數(shù)據(jù)都可以直接放入ArrayList與TreeMap中,包括null。(對(duì))放入HashMap中的元素應(yīng)謹(jǐn)慎實(shí)現(xiàn)hashCode與equals方法。(對(duì))迭代器可用于在集合中刪除符合某個(gè)條件的元素。(錯(cuò))Set接口常用于對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)。(錯(cuò))Stream流式編程的filter方法只能接收實(shí)現(xiàn)Predicate接口的類的對(duì)象實(shí)例。二、選擇題下列代碼運(yùn)行時(shí)產(chǎn)生的異常是_____A_____。

publicvoidtestException(){

Listlist=newArrayList();

list.add("t");

list.add("a");

list.add("s");

list.add("k");

Collections.swap(list,0,9);

}A.IndexOutOfBoundsException B.IOExceptionC.ArithmeticException D.InterruptedExceptionCollection接口中,能夠把集合中全部元素以O(shè)bject數(shù)組形式返回的方式是_____A_____。A.toArray() B.toObject() C.contains() D.remove()3.下列選項(xiàng)中,實(shí)現(xiàn)了接口List的類是_____B_____。A.HashSet B.LinkedList C.TreeSet D.HashMap4.下面代碼執(zhí)行的結(jié)果是______C____。

Set<String>set=newTreeSet<String>();

list.add("3");

list.add("1");

list.add("2");

list.add("1");

for(Objects:set)

System.out.print(s+"");A.3121 B.321 C.123 D.11235.下列代碼段執(zhí)行后的結(jié)果是____A______。

HashSets=newHashSet();

s.add("abc");

s.add("abcd");

s.remove("abcd");

ints1=s.size();

s.add("abc");

s.add("abce");

ints2=s.size();

System.out.println(s1+""+s2);A.12 B.13 C.22 D.236.對(duì)于Map接口,判斷某個(gè)值是否存在的方法是_____A_____。A.containsValue() B.containsKey() C.contains() D.values()7.Collection接口中,判斷集合中是否有元素的方式是____C______。A.contains() B.add() C.isEmpty() D.remove()8.Collection接口中,進(jìn)行集合批量刪除的方法是_____C_____。A.containsAll() B.add() C.removeAll() D.addAll()9.可以使用<關(guān)鍵詞,值>對(duì)的形式保存數(shù)據(jù)對(duì)象是____A______。A.HashMap B.LinkedList C.HashSet D.ArrayList10.下列關(guān)于HashMap類的描述中,錯(cuò)誤的是____D______。A.HashMap使用<關(guān)鍵字,值>的鍵值對(duì)形式保存B.HashMap允許將null用作關(guān)鍵字C.HashMap允許將null用做值D.HashMap能夠保證其中元素的順序三、編程題編寫(xiě)泛型類Score<T>,在該泛型類中創(chuàng)建List集合并定義4個(gè)方法,分別是用來(lái)添加分?jǐn)?shù)的insertScore()方法、獲得最高分的getMaxScore()方法、獲得最低分的getMinScore()方法和獲得分?jǐn)?shù)的getScore()方法。現(xiàn)有5個(gè)裁判為選手打分:9.2、8.8、8.5、9.0和8.8,去掉最高分和最低分后,在滿分為10分的前提下,計(jì)算該選手的最后得分。importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassScores<TextendsNumber>{privateList<T>scores;publicScores(){scores=newArrayList<>();}//添加分?jǐn)?shù)publicvoidinsertScore(Tscore){scores.add(score);}//獲取最高分publicTgetMaxScore(){returnscores.isEmpty()?null:Collections.max(scores);}//獲取最低分publicTgetMinScore(){returnscores.isEmpty()?null:Collections.min(scores);}//獲取最終得分publicdoublegetScore(){if(scores.size()<3){//如果分?jǐn)?shù)不足3個(gè),無(wú)法去掉最高分和最低分return0.0;}//去掉最高分和最低分List<T>tempScores=newArrayList<>(scores);TmaxScore=getMaxScore();TminScore=getMinScore();tempScores.remove(maxScore);tempScores.remove(minScore);//計(jì)算平均分doublesum=0.0;for(Tscore:tempScores){sum+=score.doubleValue();}returnsum/tempScores.size();}publicstaticvoidmain(String[]args){Scores<Double>scoreCalculator=newScores<>();scoreCalculator.insertScore(9.2);scoreCalculator.insertScore(8.8);scoreCalculator.insertScore(8.5);scoreCalculator.insertScore(9.0);scoreCalculator.insertScore(8.8);doublefinalScore=scoreCalculator.getScore();System.out.printf("該選手的最終得分為:%.2f分\n",finalScore);}}分別使用數(shù)組和ArrayList存儲(chǔ)26個(gè)大寫(xiě)英文字母(存入過(guò)程用循環(huán)實(shí)現(xiàn)),并實(shí)現(xiàn)26個(gè)英文字母的正序(AZ)或反序(ZA)輸出。importjava.util.ArrayList;

importjava.util.Collections;

importjava.util.List;

publicclassAlphabetStorage{

publicstaticvoidmain(String[]args){

//使用數(shù)組存儲(chǔ)26個(gè)大寫(xiě)英文字母

char[]alphabetArray=newchar[26];

for(inti=0;i<alphabetArray.length;i++){

alphabetArray[i]=(char)('A'+i);

}

//使用ArrayList存儲(chǔ)26個(gè)大寫(xiě)英文字母

List<Character>alphabetList=newArrayList<>();

for(inti=0;i<26;i++){

alphabetList.add((char)('A'+i));

}

//正序輸出數(shù)組中的字母

System.out.print("正序輸出數(shù)組中的字母:");

for(charc:alphabetArray){

System.out.print(c+"");

}

System.out.println();

//正序輸出ArrayList中的字母

System.out.print("正序輸出ArrayList中的字母:");

for(charc:alphabetList){

System.out.print(c+"");

}

System.out.println();

//反序輸出數(shù)組中的字母

System.out.print("反序輸出數(shù)組中的字母:");

for(inti=alphabetArray.length-1;i>=0;i--){

System.out.print(alphabetArray[i]+"");

}

System.out.println();

//反序輸出ArrayList中的字母

Collections.reverse(alphabetList);//使用Collections.reverse()方法反序

System.out.print("反序輸出ArrayList中的字母:");

for(charc:alphabetList){

System.out.print(c+"");

}

System.out.println();

}

}使用Map接口的實(shí)現(xiàn)類,存儲(chǔ)福建省、河北省兩個(gè)省份的城市列表。并可以根據(jù)輸入的省份名稱,輸出該省的主要城市。importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjava.util.Scanner;

publicclassProvinceCityMap{

publicstaticvoidmain(String[]args){

//創(chuàng)建一個(gè)HashMap來(lái)存儲(chǔ)省份和城市列表的映射

Map<String,List<String>>provinceCityMap=newHashMap<>();

//存儲(chǔ)福建省的城市列表

List<String>fujianCities=newArrayList<>();

fujianCities.add("福州");

fujianCities.add("廈門");

fujianCities.add("泉州");

provinceCityMap.put("福建省",fujianCities);

//存儲(chǔ)河北省的城市列表

List<String>hebeiCities=newArrayList<>();

hebeiCities.add("石家莊");

hebeiCities.add("唐山");

hebeiCities.add("秦皇島");

provinceCityMap.put("河北省",hebeiCities);

//創(chuàng)建一個(gè)Scanner來(lái)讀取用戶輸入

Scannerscanner=newScanner(System.in);

System.out.print("請(qǐng)輸入一個(gè)省份名稱:");

StringprovinceName=scanner.nextLine();

//輸出該省的主要城市

List<String>cities=provinceCityMap.get(provinceName);

if(cities!=null){

System.out.println(provinceName+"的主要城市有:");

for(Stringcity:cities){

System.out.println(city);

}

}else{

System.out.println("省份名稱輸入錯(cuò)誤或該省份信息未錄入系統(tǒng)。");

}

//關(guān)閉Scanner

scanner.close();

}

}進(jìn)階:查找資料,根據(jù)本書(shū)所提供電子文檔中的“行政區(qū)劃數(shù)據(jù)庫(kù).csv”編寫(xiě)一個(gè)行政區(qū)劃查詢小程序,并分析時(shí)間復(fù)雜度。importcom.opencsv.CSVReaderHeaderAware;

importcom.opencsv.exceptions.CsvException;

importjava.io.FileReader;

importjava.io.IOException;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjava.util.Scanner;

publicclassProviceCity{

publicstaticvoidmain(String[]args){

StringcsvFilePath="E:\\行政區(qū)劃數(shù)據(jù)庫(kù).csv";

Map<String,String[]>maps=newHashMap<>();

String[]regionName=new

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論