版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、java 集合框架(習(xí)題)集合框架Key Point* Collection 接口、Set 接口、List 接口基本操作* List 接口及其實(shí)現(xiàn)類(lèi)* Set 接口及其實(shí)現(xiàn)類(lèi)* 迭代遍歷* Hash 算法與hashCode 方法* Comparable 接口* Map 接口及其實(shí)現(xiàn)類(lèi)* 遍歷Map* 泛型練習(xí)1. 填空Collection 接口的特點(diǎn)是元素是對(duì)象;List 接口的特點(diǎn)是元素有(有|無(wú))順序,可以(可以|不可以)重復(fù);Set 接口的特點(diǎn)是元素?zé)o(有|無(wú))順序,不可以(可以|不可以)重復(fù);Map 接口的特點(diǎn)是元素是鍵值對(duì),其中值可以重復(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 處的代碼補(bǔ)充完整,要求輸出list 中所有元素的內(nèi)容2) 寫(xiě)出程序執(zhí)行的結(jié)果 Hello java Learn World3) 如果要把實(shí)現(xiàn)類(lèi)由ArrayList 換為L(zhǎng)inkedList,應(yīng)該改哪里?ArrayList 和LinkedList 使用上有什么區(qū)別?實(shí)現(xiàn)上有什么區(qū)別?把實(shí)例化的語(yǔ)句改為new LinkedList();ArrayList 數(shù)組實(shí)現(xiàn) 查詢(xún)快 增刪慢LinkedList 鏈表實(shí)現(xiàn) 查詢(xún)慢 增刪快4) 如果要把實(shí)現(xiàn)類(lèi)由ArrayList 換為Vector,應(yīng)該改哪里?ArrayList 和Vector 使用上有什么區(qū)別?實(shí)現(xiàn)上有什么區(qū)別?Arra
4、yList是線(xiàn)程不同步的,輕量級(jí)的,線(xiàn)程不安全,速度快 Vector是線(xiàn)程同步的 ,多線(xiàn)程訪問(wèn)比較安全,速度慢 3. (List)寫(xiě)出下面程序的運(yùn)行結(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 編譯不通過(guò)B 編譯通過(guò),運(yùn)行時(shí)異常C 編譯運(yùn)行都正常,/輸出HashSet中不能放重復(fù)值D 編譯運(yùn)行都正常,輸出45. (List)已知有一個(gè)Worker 類(lèi)如下: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)建一個(gè)List,在List 中增加三個(gè)工人,基本信息如下:姓名 年齡 工資zhang3 18 3000li4 25 3500wang5 22 32002) 在li4 之前插入一個(gè)工人,信息為:姓名:zhao6,年齡:24,工資33003) 刪除wang5 的信息4) 利用for 循環(huán)遍歷,打印List 中所有工人的信息5) 利用迭代遍歷,對(duì)List 中所有的工人調(diào)用work 方法。6) 為Worker 類(lèi)添加equals 方法6. (Set,Hash 算法)為上一題的Worker 類(lèi),在添加完equals 方法的基礎(chǔ)上
9、,添加一個(gè)hashCode 方法。public int hashCode()/1有幾種寫(xiě)法:1) return 0;2)int result = 0;if (name != null) result = name.hashCode();return result + age;3) return super.hashCode();現(xiàn)在要把Worker 類(lèi)放入HashSet 中,并希望在HashSet 中沒(méi)有重復(fù)元素,則下面說(shuō)法正確的是:A. 三種寫(xiě)法都正確B. 1), 2)寫(xiě)法正確,2)效率更高C. 2)寫(xiě)法正確,1),3)寫(xiě)法都不正確7. (Set,Hash 算法,方法覆蓋)代碼改錯(cuò)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);/返回值類(lèi)型為整形(/equals方法實(shí)現(xiàn)有錯(cuò)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中沒(méi)有定義帶下標(biāo)的add方法。System.out.println(set.size();8. (Set,Hash 算法)在前面的Worker 類(lèi)基礎(chǔ)上,為Worker 類(lèi)增加相應(yīng)的方法,使得Worker放入HashSet 中時(shí),Set 中沒(méi)有重復(fù)元素。并編寫(xiě)相應(yīng)的測(cè)試代碼。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 類(lèi)基礎(chǔ)上,為Worker 類(lèi)添加相應(yīng)的代碼,使得Worker 對(duì)象能正確放入TreeSet 中
14、。并編寫(xiě)相應(yīng)的測(cè)試代碼。注:比較時(shí),先比較工人年齡大小,年齡小的排在前面。如果兩個(gè)工人年齡相同,則再比較其收入,收入少的排前面。如果年齡和收入都相同,則根據(jù)字典順序比較工人姓名。例如:有三個(gè)工人,基本信息如下:姓名 年齡 工資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 接口中常見(jiàn)的方法put 方法表示放入一個(gè)鍵值對(duì),如果鍵已存在則新值替換舊值,如果鍵不存在則增加一
21、個(gè)鍵值對(duì)。remove 方法接受一個(gè)參數(shù),表示從映射中移除其映射關(guān)系的鍵。get 方法表示返回指定鍵所映射的值,get 方法的參數(shù)表示移除的其映射關(guān)系的鍵,返回值表示與key關(guān)聯(lián)的值。要想獲得Map 中所有的鍵,應(yīng)該使用方法ketSet,該方法返回值類(lèi)型為Set集合。要想獲得Map 中所有的值,應(yīng)該使用方法get,該方法返回值類(lèi)型為指定鍵所映射的值。要想獲得Map 中所有的鍵值對(duì)的集合,應(yīng)該使用方法entrySet,該方法返回一個(gè)Map.Entry類(lèi)型所組成的Set。11. (Map)利用Map,完成下面的功能:從命令行讀入一個(gè)字符串,表示一個(gè)年份,輸出該年的世界杯冠軍是哪支球隊(duì)。如果該年沒(méi)有
22、舉辦世界杯,則輸出:沒(méi)有舉辦世界杯。附:世界杯冠軍以及對(duì)應(yīng)的奪冠年份,請(qǐ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、"這一年沒(méi)有承辦世界杯!"); 12. (Map)已知某學(xué)校的教學(xué)課程內(nèi)容安排如下:集合框架(習(xí)題)" o:button="t" target="_blank" href=" src="file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image002.png">完成下列要求:1) 使用一個(gè)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. (泛型)使用泛型,改寫(xiě)第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 接口,改寫(xiě)第12 題的前4 問(wèn)15. *(List)寫(xiě)出下面程序的輸出結(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);/實(shí)例化的對(duì)象實(shí)際上就是一個(gè)對(duì)象的地址,/list中保存的是對(duì)象的引用,因此mc4,mc1,和list下標(biāo)為1的對(duì)象都是指向的同一個(gè)對(duì)象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)/這句話(huà)實(shí)際上就是把mc4指向了mc2對(duì)象的那個(gè)地址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的時(shí)候會(huì)自動(dòng)調(diào)用hashcode和equals方法,而在這兩方法中,name的值為空,所以會(huì)出現(xiàn)空指針異常。set.add(stu2);set.add(stu3);System.out.println(set.size();下列說(shuō)法正確的是:A. 編譯錯(cuò)誤B. 編譯正確,運(yùn)行時(shí)異常C. 編譯運(yùn)行都正確,輸出結(jié)果為3D. 編譯運(yùn)行都正確,輸出結(jié)果為217. *(Set)有如下兩個(gè)類(lèi)(只寫(xiě)了類(lèi)的屬性,請(qǐng)自行添加相應(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 類(lèi),使得Worker 對(duì)象能夠正確放入HashSet 中:即將Worker 放入HashSet 中時(shí)不會(huì)出現(xiàn)重復(fù)元素。并編寫(xiě)相應(yīng)測(cè)試代碼。18. *(Map)在原有世界杯Map 的基礎(chǔ)上,增加如下功能:讀入一支球隊(duì)的名字,輸出該球隊(duì)奪冠的年份列表。例如,讀入“巴西”,應(yīng)當(dāng)輸出1958 1962
40、 1970 1994 2002讀入“荷蘭”,應(yīng)當(dāng)輸出沒(méi)有獲得過(guò)世界杯19. *(Map)設(shè)計(jì)Account 對(duì)象如下:集合框架(習(xí)題)" o:button="t" target="_blank" href=" src="file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif">要求完善設(shè)計(jì),使得該Account 對(duì)象能夠自動(dòng)分配id。給定一個(gè)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)容放到一個(gè)Map 中,該Map 的鍵為id,值為相應(yīng)的Account 對(duì)象。最后遍歷這個(gè)Map,打印所有Account 對(duì)象的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)寫(xiě)一個(gè)函數(shù)reverseList,該函數(shù)能夠接受一個(gè)List,然后把該List 倒序排列。例如:
46、List list = new ArrayList();list.add(“Hello”);list.add(“World”);list.add(“Learn”); /此時(shí)list 為Hello World LearnreverseList(list);/調(diào)用reverseList 方法之后,list 為L(zhǎng)earn 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();寫(xiě)出該代碼的輸出結(jié)果。abc 222. *(Id,hashCode,equals)為Worker 類(lèi)增加id 屬性,用來(lái)唯一標(biāo)識(shí)一個(gè)員工。即:如果員工的id 不同,則不管其姓名、年齡、工資是否相同,都認(rèn)為是不同的員工。部分代碼如下: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 方法。要求自動(dòng)分配Worker 的id2) 完
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《數(shù)列基礎(chǔ)概念》課件
- 脂質(zhì)代謝紊亂的臨床護(hù)理
- 家族性良性天皰瘡的臨床護(hù)理
- IgA天皰瘡的臨床護(hù)理
- 鼻腔及鼻竇骨瘤的健康宣教
- 化學(xué)電源 課件zhp
- 孕婦小腿浮腫的健康宣教
- 稻農(nóng)皮炎的臨床護(hù)理
- 心源性休克的護(hù)理
- 《機(jī)械制造基礎(chǔ)》課件-05篇 第四單元 電火花加工
- 2024年P(guān)E工程師培訓(xùn)教材-助力工程師成長(zhǎng)
- 機(jī)動(dòng)車(chē)檢測(cè)站新?lián)Q版20241124質(zhì)量管理手冊(cè)
- 大部分分校:地域文化形考任務(wù)一-國(guó)開(kāi)(CQ)-國(guó)開(kāi)期末復(fù)習(xí)資料
- 【物理】期末復(fù)習(xí)練習(xí) 質(zhì)量與密度 2024-2025學(xué)年人教版物理八年級(jí)上冊(cè)
- 急性有機(jī)磷中毒急救護(hù)理
- 應(yīng)用寫(xiě)作-終結(jié)性考核-國(guó)開(kāi)(SC)-參考資料
- 2024年決戰(zhàn)行測(cè)5000題言語(yǔ)理解與表達(dá)(培優(yōu)b卷)
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 綠色建筑概論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- GB/T 44481-2024建筑消防設(shè)施檢測(cè)技術(shù)規(guī)范
- 甲狀腺超聲超聲征象及TI-RADS分類(lèi)
評(píng)論
0/150
提交評(píng)論