java集合框架(習題與答案)資料_第1頁
java集合框架(習題與答案)資料_第2頁
java集合框架(習題與答案)資料_第3頁
java集合框架(習題與答案)資料_第4頁
java集合框架(習題與答案)資料_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、java集合框架(習題)集合框架KeyPointCollection接口、Set接口、List接口基本操作List接口及其實現(xiàn)類Set接口及其實現(xiàn)類迭代遍歷Hash算法與hashCode方法Comparable接口Map接口及其實現(xiàn)類遍歷Map*泛型練習填空Collection接口的特點是元素是對象;List接口的特點是元素有(有|無)順序,可以(可以|不可以)重復;Set接口的特點是元素無(有|無)順序,不可以(可以|不可以)重復;Map接口的特點是元素是鍵值對,其中值可以重復,鍵不可以重復。(List)有如下代碼importjava.util.*;publicclassTestListpu

2、blicstaticvoidmain(Stringargs)Listlist=newArrayList();list.add(“Hello”);list.add(“World”);list.add(1,“Learn”);list.add(1,“Java”);printList(list);publicstaticvoidprintList(Listlist)for(Objectobj:list)Stringstr=(String)obj;System.out.println(obj);要求:把/1處的代碼補充完整,要求輸出list中所有元素的內容寫出程序執(zhí)行的結果HellojavaLearnW

3、orld如果要把實現(xiàn)類由ArrayList換為LinkedList,應該改哪里?ArrayList和LinkedList使用上有什么區(qū)別?實現(xiàn)上有什么區(qū)別?把實例化的語句改為newLinkedList();ArrayList數(shù)組實現(xiàn)查詢快增刪慢LinkedList鏈表實現(xiàn)查詢慢增刪快4)如果要把實現(xiàn)類由ArrayList換為Vector,應該改哪里?ArrayList和Vector使用上有什么區(qū)別?實現(xiàn)上有什么區(qū)別?ArrayList是線程不同步的,輕量級的,線程不安全,速度快Vector是線程同步的,多線程訪問比較安全,速度慢3.(List)寫出下面程序的運行結果importjava.uti

4、l.*;publicclassTestListpublicstaticvoidmain(Stringargs)Listlist=newArrayList();list.add(“Hello”)list.add(“World”)list.add(“Hello”)list.add(“Learn”)list.remove(“Hello”)list.remove(0);for(inti=0;ilist.size();i+)System.out.println(list.get(i);HelloLearn4.(Set,List)importjava.util.*;publicclassTestListS

5、etpublicstaticvoidmain(Stringargs)Listlist=newArrayList();list.add(“Hello”)list.add(“Learn”)list.add(“Hello”)list.add(“Welcome”)Setset=newHashSet();set.addAll(list);System.out.println(set.size();選擇正確答案A編譯不通過B編譯通過,運行時異常C編譯運行都正常,/輸出HashSet中不能放重復值D編譯運行都正常,輸出45.(List)已知有一個Worker類如下:publicclassWorkerpriv

6、ateintage;privateStringname;privatedoublesalary;publicWorker()publicWorker(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicdoublegetSalary()re

7、turnsalary;publicvoidsetSalary(doublesalary)this.salary=salary;publicvoidwork()System.out.println(name+“work”);完成下面的要求創(chuàng)建一個List,在List中增加三個工人,基本信息如下:姓名年齡工資zhang3183000li4253500wang5223200在li4之前插入一個工人,信息為:姓名:zhao6,年齡:24,工資3300刪除wang5的信息4)利用for循環(huán)遍歷,打印List中所有工人的信息5)利用迭代遍歷,對List中所有的工人調用work方法。6)為Worker類添加

8、equals方法6.(Set,Hash算法)為上一題的Worker類,在添加完equals方法的基礎上,添加一個hashCode方法。publicinthashCode()/1有幾種寫法:1)return0;2)intresult=0;if(name!=null)result=name.hashCode();returnresult+age;3)returnsuper.hashCode();現(xiàn)在要把Worker類放入HashSet中,并希望在HashSet中沒有重復元素,則下面說法正確的是:A.三種寫法都正確B.1),2)寫法正確,2)效率更高C.2)寫法正確,1),3)寫法都不正確7.(Se

9、t,Hash算法,方法覆蓋)代碼改錯importjava.util.*;classWorkerStringname;intage;doublesalary;publicWorker()publicWorker(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;publicinthashCode()/hashCode必須聲明為公共的。return(int)(name.hashCode()+age+salary);返回值類型為整形(/equals方法實現(xiàn)有錯publicbooleanequals(Workerw

10、)if(=name&w.salary=salary&w.age=age)returntrue;elsereturnfalse;publicclassTestWorkerpublicstaticvoidmain(Stringargs)Setset=newHashSet();set.add(newWorker(“tom”,18,2000);set.add(newWorker(“tom”,18,2000);set.add(0,newWorker(“jerry”,18,2000);/HashSet中沒有定義帶下標的add方法。System.out.println(set.size();8.(Set,H

11、ash算法)在前面的Worker類基礎上,為Worker類增加相應的方法,使得Worker放入HashSet中時,Set中沒有重復元素。并編寫相應的測試代碼。classWorkerStringname;intage;doublesalary;publicWorker()publicWorker(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;publicinthashCode()return(int)(name.hashCode()+age+salary);publicbooleanequals(Work

12、erw)if(=name&w.salary=salary&w.age=age)returntrue;elsereturnfalse;9.(Set,Comparable接口)在前面的Worker類基礎上,為Worker類添加相應的代碼,使得Worker對象能正確放入TreeSet中。并編寫相應的測試代碼。注:比較時,先比較工人年齡大小,年齡小的排在前面。如果兩個工人年齡相同,則再比較其收入,收入少的排前面。如果年齡和收入都相同,則根據字典順序比較工人姓名。例如:有三個工人,基本信息如下:姓名年齡工資zhang3181500li4181500wang5181600zhao6172000放入Tree

13、Set排序后結果為:zhao6li4zhang3wang5importjava.util.HashSet;publicclassTest1publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubHashSeths=newHashSet();Workerw1=newWorker(zhang3,18,1500);Workerw2=newWorker(lis4,18,1500);Workerw3=newWorker(wang5,18,1600);Workerw4=newWorker(zhao6,17,2000);hs.add(w1);

14、hs.add(w2);hs.add(w3);hs.add(w4);System.out.println(hs.size();System.out.println(hs);classWorkerimplementsComparableStringname;intage;doublesalary;publicWorker()publicWorker(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;OverridepublicintcompareTo(Workero)/TODOAuto-generatedmet

15、hodstubif(this.age!=o.age)returnthis.age-o.age;elseif(this.salary!=o.salary)/Integerinteger1=newInteger(this.salary)returnnewDouble(this.salary).compareTo(newDouble(o.salary);elseif(.equals()pareTo();return0;OverridepublicinthashCode()finalintprime=31;intresult=1;result=prime*result+age;result=prime

16、*result+(name=null)?0:name.hashCode();longtemp;temp=Double.doubleToLongBits(salary);result=prime*result+(int)(temp人(temp32);returnresult;Overridepublicbooleanequals(Objectobj)if(this=obj)returntrue;if(obj=null)returnfalse;if(getClass()!=obj.getClass()returnfalse;Workerother=(Worker)obj;if(age!=other

17、.age)returnfalse;if(name=null)if(!=null)returnfalse;elseif(!name.equals()returnfalse;if(Double.doubleToLongBits(salary)!=Double.doubleToLongBits(other.salary)returnfalse;returntrue;OverridepublicStringtoString()/TODOAuto-generatedmethodstubreturnage+/+salary+/+name;(Map)關于下列Map接口中常見的方法put方法表示放入一個鍵值對

18、,如果鍵已存在則新值替換舊值,如果鍵不存在則增加一個鍵值對。remove方法接受一個參數(shù),表示從映射中移除其映射關系的鍵。get方法表示返回指定鍵所映射的值,get方法的參數(shù)表示移除的其映射關系的鍵,返回值表示與key關聯(lián)的值。要想獲得Map中所有的鍵,應該使用方法ketSet,該方法返回值類型為Set集合。要想獲得Map中所有的值,應該使用方法get,該方法返回值類型為指定鍵所映射的值。要想獲得Map中所有的鍵值對的集合,應該使用方法entrySet,該方法返回一個Map.Entry類型所組成的Set。(Map)利用Map,完成下面的功能:從命令行讀入一個字符串,表示一個年份,輸出該年的世界

19、杯冠軍是哪支球隊。如果該年沒有舉辦世界杯,則輸出:沒有舉辦世界杯。附:世界杯冠軍以及對應的奪冠年份,請參考本章附錄。publicclassBk18publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubBufferedReaderbr=newBufferedReader(newInputStreamReader(System.in);Stringyear=null;tryyear=br.readLine();catch(IOExceptione)/TODOAuto-generatedcatchblocke.printStackT

20、race();Mapmap=newHashMap();map.put(2002,巴西);map.put(2006,意大利);map.put(2010,南非”);if(map.containsKey(year)System.out.println(map.get(year);elseSystem.out.println(”這一年沒有承辦世界杯!”);(Map)已知某學校的教學課程內容安排如下:集合框架(習題)o:button=ttarget=_blankhref= HYPERLINK /showpic.html%23blogid=714a83710100ptie&url=/orignal/714

21、a8371t9dbaa80ef64e /showpic.html#blogid=714a83710100ptie&url=/orignal/714a8371t9dbaa80ef64e集合框架(習題)src= HYPERLINK file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image002.png完成下列要求:使用一個Map,以老師的名字作為鍵,以老師教授的課程名作為值,表示上述課程安排。增加了一位新老師Allen教JDBCLucy改為教CoreJava遍歷Map,輸出所有的老師及老師教授的課程*利用Map,輸出所有教JSP的老師。pu

22、blicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubMapmap=newTreeMap();map.put(Tom,CoreJava);map.put(John,Oracle);map.put(Susan,Oracle);map.put(Jerry,JDBC);map.put(Jim,Unix);map.put(Kevin,JSP);map.put(Lucy,JSP);System.out.println(map.size();map.put(Allen,JSP);System.out.println(map.size();ma

23、p.remove(Lucy);map.put(Lucy,CoreJava);Setset=map.keySet();for(Objectobj:set)System.out.println(map.get(String)obj);for(Stringstr:set)if(map.get(str).equals(JSP)System.out.println(”教JSP的老師有:+str);(泛型)使用泛型,改寫第5題packagelist;importjava.util.Iterator;importjava.util.LinkedList;publicclassTest2publicstati

24、cvoidmain(Stringargs)/TODOAuto-generatedmethodstubLinkedListll=newLinkedList();Worker1w1=newWorker1(zhang3,18,3000);Worker1w2=newWorker1(li4,25,3500);Worker1w3=newWorker1(wang5,22,3200);ll.add(w1);ll.add(w2);ll.add(w3);ll.add(1,newWorker1(zhao6,24,2200);ll.remove(w3);/用for循環(huán)遍歷for(inti=0;ill.size();i

25、+)System.out.println(ll.get(i);System.out.println(=);/用迭代器遍歷Iteratoriterator=ll.iterator();while(iterator.hasNext()System.out.println(iterator.next();classWorker1privateintage;privateStringname;privatedoublesalary;publicWorker1()publicWorker1(Stringname,intage,doublesalary)=name;this.age=age;this.sa

26、lary=salary;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicdoublegetSalary()returnsalary;publicvoidsetSalary(doublesalary)this.salary=salary;publicvoidwork()System.out.println(name+work);OverridepublicinthashCo

27、de()finalintprime=31;intresult=1;result=prime*result+age;returnresult;Overridepublicbooleanequals(Objectobj)if(this=obj)returntrue;if(obj=null)returnfalse;if(getClass()!=obj.getClass()returnfalse;Worker1other=(Worker1)obj;if(age!=other.age)returnfalse;returntrue;OverridepublicStringtoString()/TODOAu

28、to-generatedmethodstubreturnname+/+age+/+salary;14.(泛型)使用泛型和Map.Entry接口,改寫第12題的前4問*(List)寫出下面程序的輸出結果importjava.util.*;classMyClassintvalue;publicMyClass()publicMyClass(intvalue)this.value=value;publicStringtoString()return“”+value;publicclassTestListpublicstaticvoidmain(Stringargs)MyClassmc1=newMyCl

29、ass(10);MyClassmc2=newMyClass(20);實例化的對象實際上就是一個對象的地址,/list中保存的是對象的引用,因此mc4,mc1,和list下標為1的對象都是指向的同一個對象MyClassmc3=newMyClass(30);Listlist=newArrayList();list.add(mc1);list.add(mc2);list.add(mc3);MyClassmc4=(MyClass)list.get(1)這句話實際上就是把mc4指向了mc2對象的那個地址MyClassmc4=(MyClass)mc2;mc4.value=50;for(inti=0;i集合

30、框架(習題)src= HYPERLINK file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif要求,完善Worker和Address類,使得Worker對象能夠正確放入HashSet中:即將Worker放入HashSet中時不會出現(xiàn)重復元素。并編寫相應測試代碼。*(Map)在原有世界杯Map的基礎上,增加如下功能:讀入一支球隊的名字,輸出該球隊奪冠的年份列表。例如,讀入“巴西”,應當輸出19581962197019942002讀入“荷蘭”,應當輸出沒有獲得過世界杯*(Map)設計Account對象如下:集合框架(習題)

31、o:button=ttarget=_blankhref= HYPERLINK /showpic.html%23blogid=714a83710100ptie&url=/orignal/714a8371t9dba9df86404 /showpic.html#blogid=714a83710100ptie&url=/orignal/714a8371t9dba9df86404集合框架(習題)src= HYPERLINK file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif要求完善設計,使得該Account對象能夠自動分配id

32、。給定一個List如下:Listlist=newArrayList();list.add(newAccount(10.00,“1234”);list.add(newAccount(15.00,“5678”);list.add(newAccount(0,“1010”);要求把List中的內容放到一個Map中,該Map的鍵為id,值為相應的Account對象。最后遍歷這個Map,打印所有Account對象的id和余額。importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;

33、importjava.util.Random;importjava.util.Set;publicclassBK20publicstaticvoidmain(Stringargs)Randomran=newRandom();System.out.println(ran.nextLong();Listlist=newArrayList();list.add(newAccount(10.00,1234);list.add(newAccount(15.00,5678);list.add(newAccount(0.0,1010);Mapmap=newHashMap();for(inti=0;ilist

34、.size();i+)Accountaccount=(Account)list.get(i);map.put(account.getId(),account);SetMap.Entryset=map.entrySet();for(Map.Entryobj:set)Accountacc=(Account)obj.getValue();System.out.println(obj.getKey()+/+acc.getBalance();classAccountprivatelongid;privatedoublebalance;privateStringpassword;publicAccount

35、()publicAccount(doublebalance,Stringpassword)this.id=newRandom().nextLong();this.balance=balance;this.password=password;publiclonggetId()returnid;publicvoidsetId(longid)this.id=id;publicdoublegetBalance()returnbalance;publicvoidsetBalance(doublebalance)this.balance=balance;publicStringgetPassword()r

36、eturnpassword;publicvoidsetPassword(Stringpassword)this.password=password;*(List)寫一個函數(shù)reverseList,該函數(shù)能夠接受一個List,然后把該List倒序排列。例如:Listlist=newArrayList();list.add(“Hello”);list.add(“World”);list.add(“Learn”);/此時list為HelloWorldLearnreverseList(list);/調用reverseList方法之后,list為LearnWorldHello*(Map,Hash算法)有

37、如下代碼:importjava.util.*;classMyKeyintkeyValue;publicMyKey()publicMyKey(intvalue)this.keyValue=value;classMyValueStringvalue;publicMyValue()publicMyValue(Stringvalue)this.value=value;publicStringtoString()returnvalue;publicclassTestMappublicstaticvoidmain(Stringargs)Mapmap=newHashMap();MyKeykey1=newMy

38、Key(10);map.put(key1,newMyValue(“abc”);map.put(newMyKey(10),newMyValue(“cde”);System.out.println(map.get(key1);System.out.println(map.size();寫出該代碼的輸出結果。abc2*(Id,hashCode,equals)為Worker類增加id屬性,用來唯一標識一個員工。即:如果員工的id不同,則不管其姓名、年齡、工資是否相同,都認為是不同的員工。部分代碼如下:classWorkerprivatefinalLongid;privateStringname;pri

39、vatedoublesalary;privateintage;/構造方法/get/set方法publicbooleanequals(Objectobj)/1此處僅判斷id是否相同if(this.id=obj.id)returntrue;returnfalse;publicinthashCode()/2此處返回hashCode要求:完善構造方法和get/set方法。要求自動分配Worker的id完善equals方法。要求僅判斷id是否相同/2處,如果寫成return(int)(name.hashCode()+id.hashCode()+age+salary);是否正確?為什么?這里比較的dqua

40、ls方法任務只要id相同就是同一個對象,*(綜合)有如下Student對象集合框架(習題)o:button=ttarget=_blankhref= HYPERLINK /showpic.html%23blogid=714a83710100ptie&url=http:/s9.sinai /showpic.html#blogid=714a83710100ptie&url=http:/s9.sinai/orignal/714a8371t9dba99085eb8集合框架(習題)src= HYPERLINK file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101c

41、lip_image001.gif其中,classNum表示學生的班號,例如“class05”。有如下ListListlist=newArrayList();list.add(newStudent(“Tom”,18,100,“class05”);list.add(newStudent(“Jerry”,22,70,“class04”);list.add(newStudent(“Owen”,25,90,“class05”);list.add(newStudent(“Jim”,30,80,“class05”);list.add(newStudent(“Steve”,28,66,“class06”);l

42、ist.add(newStudent(“Kevin”,24,100,“class04”);在這個list的基礎上,完成下列要求:1)計算所有學生的平均年齡2)計算各個班級的平均分packageset;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassBK24publicstaticvoidmain(Stringargs)/TODOAuto-generat

43、edmethodstubListlist=newArrayList();list.add(newStudent(Tom,18,100,class05);list.add(newStudent(Jerry,22,70,class04);list.add(newStudent(Owen,25,90,class05);list.add(newStudent(Jim,30,80,class05);list.add(newStudent(Steve,28,66,class06);list.add(newStudent(Kevin,24,100,class04);Mapmap=newHashMap();f

44、or(inti=0;ilist.size();i+)Studentstu=list.get(i);Stringstr=stu.getClassNum();if(map.containsKey(str)Listl=(List)map.get(str);l.add(stu);elseListl=newArrayList();l.add(stu);map.put(str,l);Setset=map.keySet();Iteratoriterator=set.iterator();while(iterator.hasNext()intsum=0;ObjectobjStu=iterator.next();Listl=(List)map.get(objStu);for(inti=0;il.size();i+)sum+=(Student)l.get(i).getScore();System.out.println(sum/l.size();classStudentprivateStringname;privateintage;privateintscore;privateStringclassNum;publicStudent(Stringname,

溫馨提示

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

最新文檔

評論

0/150

提交評論