java 集合框架(习题与答案).doc

上传人:laozhun 文档编号:2386797 上传时间:2023-02-17 格式:DOC 页数:30 大小:77.50KB
返回 下载 相关 举报
java 集合框架(习题与答案).doc_第1页
第1页 / 共30页
java 集合框架(习题与答案).doc_第2页
第2页 / 共30页
java 集合框架(习题与答案).doc_第3页
第3页 / 共30页
java 集合框架(习题与答案).doc_第4页
第4页 / 共30页
java 集合框架(习题与答案).doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《java 集合框架(习题与答案).doc》由会员分享,可在线阅读,更多相关《java 集合框架(习题与答案).doc(30页珍藏版)》请在三一办公上搜索。

1、java 集合框架(习题)集合框架Key Point* Collection 接口、Set 接口、List 接口基本操作* List 接口及其实现类* Set 接口及其实现类* 迭代遍历* Hash 算法与hashCode 方法* Comparable 接口* Map 接口及其实现类* 遍历Map* 泛型练习1. 填空Collection 接口的特点是元素是对象;List 接口的特点是元素有(有|无)顺序,可以(可以|不可以)重复;Set 接口的特点是元素无(有|无)顺序,不可以(可以|不可以)重复;Map 接口的特点是元素是键值对,其中值可以重复,键不可以重复。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 中所有元素的内容2) 写出程序执行的结果 Hello java Learn World3) 如果要把实现类由ArrayList 换为LinkedList,应该改哪里?ArrayList 和LinkedList 使用上有什么区别?实现上有什么区别?把实例化的语句改为new LinkedList();ArrayList 数组实现 查询快 增删慢LinkedList 链表实现 查询慢 增删快4) 如果要把实现类由ArrayList 换为Vector,应该改哪里?ArrayList 和Vector 使用上有什么区别?实现上有什么区别?Arra

4、yList是线程不同步的,轻量级的,线程不安全,速度快 Vector是线程同步的 ,多线程访问比较安全,速度慢 3. (List)写出下面程序的运行结果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; ilist.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);Syst

6、em.out.println(set.size();选择正确答案A 编译不通过B 编译通过,运行时异常C 编译运行都正常,/输出HashSet中不能放重复值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)this.name = name;this.age = age;this.sa

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

8、rintln(name + “ work”);完成下面的要求1) 创建一个List,在List 中增加三个工人,基本信息如下:姓名 年龄 工资zhang3 18 3000li4 25 3500wang5 22 32002) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资33003) 删除wang5 的信息4) 利用for 循环遍历,打印List 中所有工人的信息5) 利用迭代遍历,对List 中所有的工人调用work 方法。6) 为Worker 类添加equals 方法6. (Set,Hash 算法)为上一题的Worker 类,在添加完equals 方法的基础上,添加一

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();现在要把Worker 类放入HashSet 中,并希望在HashSet 中没有重复元素,则下面说法正确的是:A. 三种写法都正确B. 1), 2)写法正确,2)效率更高C. 2)写法正确,1),3)写法都不正确7. (Set,Hash 算法,方法覆盖)代码改错import ja

10、va.util.*;class WorkerString name;int age;double salary;public Worker()public Worker(String name, int age, double salary)this.name = name;this.age = age;this.salary = salary;public int hashCode()/hashCode必须声明为公共的。return (int)(name.hashCode() + age + salary);/返回值类型为整形(/equals方法实现有错public boolean equa

11、ls(Worker w)if (w.name = 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”, 18, 2000);/HashSet中没

12、有定义带下标的add方法。System.out.println(set.size();8. (Set,Hash 算法)在前面的Worker 类基础上,为Worker 类增加相应的方法,使得Worker放入HashSet 中时,Set 中没有重复元素。并编写相应的测试代码。class WorkerString name;int age;double salary;public Worker()public Worker(String name, int age, double salary)this.name = name;this.age = age;this.salary = salary;

13、public int hashCode()return (int)(name.hashCode() + age + salary); public boolean equals(Worker w)if (w.name = name & w.salary = salary & w.age = age)return true;else return false;9. (Set,Comparable 接口)在前面的Worker 类基础上,为Worker 类添加相应的代码,使得Worker 对象能正确放入TreeSet 中。并编写相应的测试代码。注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两

14、个工人年龄相同,则再比较其收入,收入少的排前面。如果年龄和收入都相同,则根据字典顺序比较工人姓名。例如:有三个工人,基本信息如下:姓名 年龄 工资zhang3 18 1500li4 18 1500wang5 18 1600zhao6 17 2000放入TreeSet 排序后结果为:zhao6 li4 zhang3 wang5import java.util.HashSet; public class Test1 public static void main(String args) / TODO Auto-generated method stub HashSet hs=new HashSe

15、t(); 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.add(w3); hs.add(w4); System.out.println(hs.size(); System.out.println(hs); class Worker implements Comparable String n

16、ame; int age; double salary; public Worker() public Worker(String name, int age, double salary) this.name = name; this.age = age; this.salary = salary; Override public int compareTo(Worker o) / TODO Auto-generated method stub if(this.age!=o.age) return this.age-o.age; else if(this.salary!=o.salary)

17、/Integer integer1=new Integer(this.salary) return new Double(this.salary).compareTo(new Double(o.salary); else if(this.name.equals(o.name) return pareTo(o.name); return 0; Override public int hashCode() final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + (n

18、ame = null) ? 0 : name.hashCode(); long temp; temp = Double.doubleToLongBits(salary); result = prime * result + (int) (temp (temp 32); return result; Override public boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; W

19、orker other = (Worker) obj; if (age != other.age) return false; if (name = null) if (other.name != null) return false; else if (!name.equals(other.name) return false; if (Double.doubleToLongBits(salary) != Double .doubleToLongBits(other.salary) return false; return true; Override public String toStr

20、ing() / TODO Auto-generated method stub return age+/+salary+/+name; 10. (Map)关于下列Map 接口中常见的方法put 方法表示放入一个键值对,如果键已存在则新值替换旧值,如果键不存在则增加一个键值对。remove 方法接受一个参数,表示从映射中移除其映射关系的键。get 方法表示返回指定键所映射的值,get 方法的参数表示移除的其映射关系的键,返回值表示与key关联的值。要想获得Map 中所有的键,应该使用方法ketSet,该方法返回值类型为Set集合。要想获得Map 中所有的值,应该使用方法get,该方法返回值类型为

21、指定键所映射的值。要想获得Map 中所有的键值对的集合,应该使用方法entrySet,该方法返回一个Map.Entry类型所组成的Set。11. (Map)利用Map,完成下面的功能:从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯,则输出:没有举办世界杯。附:世界杯冠军以及对应的夺冠年份,请参考本章附录。public class Bk18 public static void main(String args) / TODO Auto-generated method stub BufferedReader br=new BufferedReade

22、r(new InputStreamReader(System.in); String year=null; try year=br.readLine(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); Map map=new HashMap(); map.put(2002, 巴西); map.put(2006, 意大利); map.put(2010,南非); if(map.containsKey(year) System.out.println(map.get(year); else S

23、ystem.out.println(这一年没有承办世界杯!); 12. (Map)已知某学校的教学课程内容安排如下:集合框架(习题) o:button=t target=_blank href= src=file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image002.png完成下列要求:1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排。2) 增加了一位新老师Allen 教JDBC3) Lucy 改为教CoreJava4) 遍历Map,输出所有的老师及老师教授的课程5) *利用Map,输出所有教JSP

24、的老师。public static void main(String args) / TODO Auto-generated method stub Map map=new TreeMap(); 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, JS

25、P); System.out.println(map.size(); map.remove(Lucy); map.put(Lucy, CoreJava); Set 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); 13. (泛型)使用泛型,改写第5 题package list; import java.util.Iterato

26、r;import java.util.LinkedList; public class Test2 public static void main(String args) / TODO Auto-generated method stub LinkedList ll=new LinkedList(); Worker1 w1=new Worker1(zhang3,18,3000); Worker1 w2=new Worker1(li4,25,3500); Worker1 w3=new Worker1(wang5,22,3200); ll.add(w1); ll.add(w2); ll.add(

27、w3); ll.add(1, new Worker1(zhao6,24,2200); ll.remove(w3); /用for循环遍历 for(int i=0;ill.size();i+) System.out.println(ll.get(i); System.out.println(=); /用迭代器遍历 Iterator iterator=ll.iterator(); while(iterator.hasNext() System.out.println(iterator.next(); class Worker1 private int age; private String name

28、; private double salary; public Worker1 () public Worker1 (String name, int age, double salary) this.name = name; this.age = age; this.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) th

29、is.name = name; public double getSalary() return salary; public void setSalary(double salary) this.salary = salary; public void work() System.out.println(name + work); Override public int hashCode() final int prime = 31; int result = 1; result = prime * result + age; return result; Override public b

30、oolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; Worker1 other = (Worker1) obj; if (age != other.age) return false; return true; Override public String toString() / TODO Auto-generated method stub return name+/+age+/+

31、salary; 14. (泛型)使用泛型和Map.Entry 接口,改写第12 题的前4 问15. *(List)写出下面程序的输出结果import java.util.*;class MyClassint value;public 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);M

32、yClass mc2 = new MyClass(20);/实例化的对象实际上就是一个对象的地址,/list中保存的是对象的引用,因此mc4,mc1,和list下标为1的对象都是指向的同一个对象MyClass mc3 = new 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;fo

33、r(int i = 0; i要求,完善Worker 和Address 类,使得Worker 对象能够正确放入HashSet 中:即将Worker 放入HashSet 中时不会出现重复元素。并编写相应测试代码。18. *(Map)在原有世界杯Map 的基础上,增加如下功能:读入一支球队的名字,输出该球队夺冠的年份列表。例如,读入“巴西”,应当输出1958 1962 1970 1994 2002读入“荷兰”,应当输出没有获得过世界杯19. *(Map)设计Account 对象如下:集合框架(习题) o:button=t target=_blank href= src=file:/C:DOCUME1ADMINI1LOCALS1Tempmsohtmlclip101clip_image001.gif要求完善设计,使得该Account 对象能够自动分配id。给定一个List 如下:List list = new ArrayList();list.add(new Account(10.00, “1234”);list.a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号