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

下載本文檔

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

文檔簡介

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

2、mport java.util.*;public class TestListpublic static void main(String args)List list = new ArrayList();list.add(“Hello”);list.add(“World”);list.add(1, “Learn”);list.add(1, “Java”);printList(list);public static void printList(List list)for(Object obj:list)String str=(String)obj;System.out.println(obj

3、);要求:1) 把/1 處的代碼補充完整,要求輸出list 中所有元素的內(nèi)容2) 寫出程序執(zhí)行的結(jié)果 Hello java Learn World3) 如果要把實現(xiàn)類由ArrayList 換為LinkedList,應(yīng)該改哪里?ArrayList 和LinkedList 使用上有什么區(qū)別?實現(xiàn)上有什么區(qū)別?把實例化的語句改為new LinkedList();ArrayList 數(shù)組實現(xiàn) 查詢快 增刪慢LinkedList 鏈表實現(xiàn) 查詢慢 增刪快4) 如果要把實現(xiàn)類由ArrayList 換為Vector,應(yīng)該改哪里?ArrayList 和Vector 使用上有什么區(qū)別?實現(xiàn)上有什么區(qū)別?Arra

4、yList是線程不同步的,輕量級的,線程不安全,速度快 Vector是線程同步的 ,多線程訪問比較安全,速度慢 3. (List)寫出下面程序的運行結(jié)果import java.util.*;public class TestListpublic static void main(String args)List list = new ArrayList();list.add(“Hello”);list.add(“World”);list.add(“Hello”);list.add(“Learn”);list.remove(“Hello”);list.remove(0);for(int i =

5、0; i<list.size(); i+)System.out.println(list.get(i);HelloLearn4. (Set,List)import java.util.*;public class TestListSetpublic static void main(String args)List list = new ArrayList();list.add(“Hello”);list.add(“Learn”);list.add(“Hello”);list.add(“Welcome”);Set set = new HashSet();set.addAll(list);

6、System.out.println(set.size();選擇正確答案A 編譯不通過B 編譯通過,運行時異常C 編譯運行都正常,/輸出HashSet中不能放重復(fù)值D 編譯運行都正常,輸出45. (List)已知有一個Worker 類如下:public class Worker private int age;private String name;private double salary;public Worker ()public Worker (String name, int age, double salary) = name;this.age = age;thi

7、s.salary = salary;public int getAge() return age;public void setAge(int age) this.age = age;public String getName() return name;public void setName(String name) = name;public double getSalary()return salary;public void setSalary(double salary)this.salary = salary;public void work()System.o

8、ut.println(name + “ work”);完成下面的要求1) 創(chuàng)建一個List,在List 中增加三個工人,基本信息如下:姓名 年齡 工資zhang3 18 3000li4 25 3500wang5 22 32002) 在li4 之前插入一個工人,信息為:姓名:zhao6,年齡:24,工資33003) 刪除wang5 的信息4) 利用for 循環(huán)遍歷,打印List 中所有工人的信息5) 利用迭代遍歷,對List 中所有的工人調(diào)用work 方法。6) 為Worker 類添加equals 方法6. (Set,Hash 算法)為上一題的Worker 類,在添加完equals 方法的基礎(chǔ)上

9、,添加一個hashCode 方法。public int hashCode()/1有幾種寫法:1) return 0;2)int result = 0;if (name != null) result = name.hashCode();return result + age;3) return super.hashCode();現(xiàn)在要把Worker 類放入HashSet 中,并希望在HashSet 中沒有重復(fù)元素,則下面說法正確的是:A. 三種寫法都正確B. 1), 2)寫法正確,2)效率更高C. 2)寫法正確,1),3)寫法都不正確7. (Set,Hash 算法,方法覆蓋)代碼改錯impor

10、t java.util.*;class WorkerString name;int age;double salary;public Worker()public Worker(String name, int age, double salary) = name;this.age = age;this.salary = salary;public int hashCode()/hashCode必須聲明為公共的。return (int)(name.hashCode() + age + salary);/返回值類型為整形(/equals方法實現(xiàn)有錯public boolean

11、equals(Worker w)if ( = name && w.salary = salary && w.age = age)return true;else return false;public class TestWorkerpublic static void main(String args)Set set = new HashSet();set.add(new Worker(“tom”, 18, 2000);set.add(new Worker(“tom”, 18, 2000);set.add(0, new Worker(“jerry”

12、, 18, 2000);/HashSet中沒有定義帶下標的add方法。System.out.println(set.size();8. (Set,Hash 算法)在前面的Worker 類基礎(chǔ)上,為Worker 類增加相應(yīng)的方法,使得Worker放入HashSet 中時,Set 中沒有重復(fù)元素。并編寫相應(yīng)的測試代碼。class WorkerString name;int age;double salary;public Worker()public Worker(String name, int age, double salary) = name;this.age = age

13、;this.salary = salary;public int hashCode()return (int)(name.hashCode() + age + salary); public boolean equals(Worker w)if ( = name && w.salary = salary && w.age = age)return true;else return false;9. (Set,Comparable 接口)在前面的Worker 類基礎(chǔ)上,為Worker 類添加相應(yīng)的代碼,使得Worker 對象能正確放入TreeSet 中

14、。并編寫相應(yīng)的測試代碼。注:比較時,先比較工人年齡大小,年齡小的排在前面。如果兩個工人年齡相同,則再比較其收入,收入少的排前面。如果年齡和收入都相同,則根據(jù)字典順序比較工人姓名。例如:有三個工人,基本信息如下:姓名 年齡 工資zhang3 18 1500li4 18 1500wang5 18 1600zhao6 17 2000放入TreeSet 排序后結(jié)果為:zhao6 li4 zhang3 wang5import java.util.HashSet; public class Test1 public static void main(String args) / TODO Auto-gen

15、erated method stub HashSet<Worker> hs=new HashSet<Worker>(); Worker w1=new Worker("zhang3", 18, 1500); Worker w2=new Worker("lis4",18,1500); Worker w3=new Worker("wang5",18,1600); Worker w4=new Worker("zhao6",17,2000); hs.add(w1); hs.add(w2); hs.ad

16、d(w3); hs.add(w4); System.out.println(hs.size(); System.out.println(hs); class Worker implements Comparable<Worker> String name; int age; double salary; public Worker() public Worker(String name, int age, double salary) = name; this.age = age; this.salary = salary; Override public in

17、t compareTo(Worker o) / TODO Auto-generated method stub if(this.age!=o.age) return this.age-o.age; else if(this.salary!=o.salary) /Integer integer1=new Integer(this.salary) return new Double(this.salary).compareTo(new Double(o.salary); else if(.equals() return pareTo(); return 0

18、; Override public int hashCode() final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + (name = null) ? 0 : name.hashCode(); long temp; temp = Double.doubleToLongBits(salary); result = prime * result + (int) (temp (temp >>> 32); return result; Overrid

19、e public boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; Worker other = (Worker) obj; if (age != other.age) return false; if (name = null) if ( != null) return false; else if (!name.equals() retu

20、rn false; if (Double.doubleToLongBits(salary) != Double .doubleToLongBits(other.salary) return false; return true; Override public String toString() / TODO Auto-generated method stub return age+"/"+salary+"/"+name; 10. (Map)關(guān)于下列Map 接口中常見的方法put 方法表示放入一個鍵值對,如果鍵已存在則新值替換舊值,如果鍵不存在則增加一

21、個鍵值對。remove 方法接受一個參數(shù),表示從映射中移除其映射關(guān)系的鍵。get 方法表示返回指定鍵所映射的值,get 方法的參數(shù)表示移除的其映射關(guān)系的鍵,返回值表示與key關(guān)聯(lián)的值。要想獲得Map 中所有的鍵,應(yīng)該使用方法ketSet,該方法返回值類型為Set集合。要想獲得Map 中所有的值,應(yīng)該使用方法get,該方法返回值類型為指定鍵所映射的值。要想獲得Map 中所有的鍵值對的集合,應(yīng)該使用方法entrySet,該方法返回一個Map.Entry類型所組成的Set。11. (Map)利用Map,完成下面的功能:從命令行讀入一個字符串,表示一個年份,輸出該年的世界杯冠軍是哪支球隊。如果該年沒有

22、舉辦世界杯,則輸出:沒有舉辦世界杯。附:世界杯冠軍以及對應(yīng)的奪冠年份,請參考本章附錄。public class Bk18 public static void main(String args) / TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader(System.in); String year=null; try year=br.readLine(); catch (IOException e) / TODO Auto-generated catch block

23、 e.printStackTrace(); Map<String,String> map=new HashMap<String, String>(); map.put("2002", "巴西"); map.put("2006", "意大利"); map.put("2010","南非"); if(map.containsKey(year) System.out.println(map.get(year); else System.out.println(

24、"這一年沒有承辦世界杯!"); 12. (Map)已知某學(xué)校的教學(xué)課程內(nèi)容安排如下:集合框架(習(xí)題)" o:button="t" target="_blank" href=" src="file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image002.png">完成下列要求:1) 使用一個Map,以老師的名字作為鍵,以老師教授的課程名作為值,表示上述課程安排。2) 增加了一位新老師Allen 教JDBC3) Lucy 改為教CoreJ

25、ava4) 遍歷Map,輸出所有的老師及老師教授的課程5) *利用Map,輸出所有教JSP 的老師。public static void main(String args) / TODO Auto-generated method stub Map<String, String> map=new TreeMap<String, String>(); map.put("Tom", "CoreJava"); map.put("John", "Oracle"); map.put("Sus

26、an", "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.pri

27、ntln(map.size(); map.remove("Lucy"); map.put("Lucy", "CoreJava"); Set<String> set=map.keySet(); for(Object obj:set) System.out.println(map.get(String)obj); for(String str:set) if(map.get(str).equals("JSP") System.out.println("教JSP的老師有:"+str); 1

28、3. (泛型)使用泛型,改寫第5 題package list; import java.util.Iterator;import java.util.LinkedList; public class Test2 public static void main(String args) / TODO Auto-generated method stub LinkedList<Worker1> ll=new LinkedList<Worker1>(); Worker1 w1=new Worker1("zhang3",18,3000); Worker1 w

29、2=new Worker1("li4",25,3500); Worker1 w3=new Worker1("wang5",22,3200); ll.add(w1); ll.add(w2); ll.add(w3); ll.add(1, new Worker1("zhao6",24,2200); ll.remove(w3); /用for循環(huán)遍歷 for(int i=0;i<ll.size();i+) System.out.println(ll.get(i); System.out.println("="); /用

30、迭代器遍歷 Iterator iterator=ll.iterator(); while(iterator.hasNext() System.out.println(iterator.next(); class Worker1 private int age; private String name; private double salary; public Worker1 () public Worker1 (String name, int age, double salary) = name; this.age = age; this.salary = salary

31、; public int getAge() return age; public void setAge(int age) this.age = age; public String getName() return name; public void setName(String name) = name; public double getSalary() return salary; public void setSalary(double salary) this.salary = salary; public void work() System.out.prin

32、tln(name + "work"); Override public int hashCode() final int prime = 31; int result = 1; result = prime * result + age; return result; Override public boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; Worker

33、1 other = (Worker1) obj; if (age != other.age) return false; return true; Override public String toString() / TODO Auto-generated method stub return name+"/"+age+"/"+salary; 14. (泛型)使用泛型和Map.Entry 接口,改寫第12 題的前4 問15. *(List)寫出下面程序的輸出結(jié)果import java.util.*;class MyClassint value;publ

34、ic MyClass()public MyClass(int value) this.value = value; public String toString()return “”+value;public class TestListpublic static void main(String args)MyClass mc1 = new MyClass(10);MyClass mc2 = new MyClass(20);/實例化的對象實際上就是一個對象的地址,/list中保存的是對象的引用,因此mc4,mc1,和list下標為1的對象都是指向的同一個對象MyClass mc3 = new

35、 MyClass(30);List list = new ArrayList();list.add(mc1);list.add(mc2);list.add(mc3);MyClass mc4 = (MyClass) list.get(1)/這句話實際上就是把mc4指向了mc2對象的那個地址MyClass mc4=(MyClass)mc2;mc4.value = 50;for(int i = 0; i<list.size(); i+)System.out.println(list.get(i);16. *(Set,HashSet,空指針)有下面代碼import java.util.*;cla

36、ss Student int age;String name;public Student()public Student(String name, int age) = name;this.age = age;public int hashCode()return name.hashCode() + age;public boolean equals(Object o)if (o = null) return false;if (o = this) return true;if (o.getClass() != this.getClass() return false;St

37、udent stu = (Student) o;if (.equals(name) && stu.age = age) return true;else return false;public class TestHashSetpublic static void main(String args)Set set = new HashSet();Student stu1 = new Student();Student stu2 = new Student(“Tom”, 18);Student stu3 = new Student(“Tom”, 18);set.a

38、dd(stu1);在添加stu1的時候會自動調(diào)用hashcode和equals方法,而在這兩方法中,name的值為空,所以會出現(xiàn)空指針異常。set.add(stu2);set.add(stu3);System.out.println(set.size();下列說法正確的是:A. 編譯錯誤B. 編譯正確,運行時異常C. 編譯運行都正確,輸出結(jié)果為3D. 編譯運行都正確,輸出結(jié)果為217. *(Set)有如下兩個類(只寫了類的屬性,請自行添加相應(yīng)的構(gòu)造方法和get/set 方法)集合框架(習(xí)題)" o:spid="_x0000_i1032" o:button=&quo

39、t;t" target="_blank" href=" src="file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif">要求,完善Worker 和Address 類,使得Worker 對象能夠正確放入HashSet 中:即將Worker 放入HashSet 中時不會出現(xiàn)重復(fù)元素。并編寫相應(yīng)測試代碼。18. *(Map)在原有世界杯Map 的基礎(chǔ)上,增加如下功能:讀入一支球隊的名字,輸出該球隊奪冠的年份列表。例如,讀入“巴西”,應(yīng)當輸出1958 1962

40、 1970 1994 2002讀入“荷蘭”,應(yīng)當輸出沒有獲得過世界杯19. *(Map)設(shè)計Account 對象如下:集合框架(習(xí)題)" o:button="t" target="_blank" href=" src="file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif">要求完善設(shè)計,使得該Account 對象能夠自動分配id。給定一個List 如下:List list = new ArrayList();list.add(new

41、 Account(10.00, “1234”);list.add(new Account(15.00, “5678”);list.add(new Account(0, “1010”);要求把List 中的內(nèi)容放到一個Map 中,該Map 的鍵為id,值為相應(yīng)的Account 對象。最后遍歷這個Map,打印所有Account 對象的id 和余額。import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;import j

42、ava.util.Set; public class BK20 public static void main(String args) Random ran=new Random(); System.out.println(ran.nextLong(); List list=new ArrayList(); list.add(new Account(10.00, "1234"); list.add(new Account(15.00, "5678"); list.add(new Account(0.0, "1010"); Map m

43、ap=new HashMap(); for(int i=0;i<list.size();i+) Account account=(Account)list.get(i); map.put(account.getId(), account); Set<Map.Entry<Long, Object>> set=map.entrySet(); for(Map.Entry<Long, Object>obj:set) Account acc=(Account)obj.getValue(); System.out.println(obj.getKey()+&quo

44、t;/"+acc.getBalance(); class Account private long id; private double balance; private String password; public Account() public Account(double balance,String password) this.id=new Random().nextLong(); this.balance=balance; this.password=password; public long getId() return id; public void setId(

45、long id) this.id = id; public double getBalance() return balance; public void setBalance(double balance) this.balance = balance; public String getPassword() return password; public void setPassword(String password) this.password = password; 20. *(List)寫一個函數(shù)reverseList,該函數(shù)能夠接受一個List,然后把該List 倒序排列。例如:

46、List list = new ArrayList();list.add(“Hello”);list.add(“World”);list.add(“Learn”); /此時list 為Hello World LearnreverseList(list);/調(diào)用reverseList 方法之后,list 為Learn World Hello21. *(Map,Hash 算法)有如下代碼:import java.util.*;class MyKeyint keyValue;public MyKey()public MyKey(int value)this.keyValue = value;clas

47、s MyValueString value;public MyValue()public MyValue(String value)this.value = value;public String toString()return value;public class TestMappublic static void main(String args)Map map = new HashMap();MyKey key1 = new MyKey(10);map.put(key1, new MyValue(“abc”);map.put(new MyKey(10), new MyValue(“cd

48、e”);System.out.println(map.get(key1);System.out.println(map.size();寫出該代碼的輸出結(jié)果。abc 222. *(Id,hashCode,equals)為Worker 類增加id 屬性,用來唯一標識一個員工。即:如果員工的id 不同,則不管其姓名、年齡、工資是否相同,都認為是不同的員工。部分代碼如下:class Workerprivate final Long id;private String name;private double salary;private int age;/構(gòu)造方法/get/set 方法public boolean equals(Object obj) /1 此處僅判斷id 是否相同if(this.id=obj.id)return true;return false;public int hashCode()/2 此處返回hashCode要求:1) 完善構(gòu)造方法和get/set 方法。要求自動分配Worker 的id2) 完

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論