集合框架练习
更新时间:2024-03-08 09:41:01 阅读量: 综合文库 文档下载
集合框架
Key Point
* Collection 接口、Set 接口、List 接口基本操作 * List 接口及其实现类 * Set 接口及其实现类 * 迭代遍历
* Hash 算法与hashCode方法 * Comparable 接口 * Map 接口及其实现类 * 遍历Map * 泛型 练习 1. 填空
Collection 接口的特点是元素是_________;
List 接口的特点是元素_____(有|无)顺序,______(可以|不可以)重复; Set 接口的特点是元素_____(有|无)顺序,______(可以|不可以)重复;
Map 接口的特点是元素是__________,其中_____可以重复,________不可以重复。 2. (List)有如下代码
import java.util.*; public class TestList{
public 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){ } }
要求:
1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容 2) 写出程序执行的结果
3) 如果要把实现类由ArrayList换为LinkedList,应该改哪里?ArrayList和 LinkedList使用上有什么区别?实现上有什么区别?
4) 如果要把实现类由ArrayList换为Vector,应该改哪里?ArrayList和Vector 使 用上有什么区别?实现上有什么区别? 3. (List)写出下面程序的运行结果 import java.util.*; public class TestList{
public 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(inti = 0; i 4. (Set,List) import java.util.*; public class TestListSet{ public 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); System.out.println(set.size()); } } 选择正确答案 A.编译不通过 B.编译通过,运行时异常 C.编译运行都正常,输出3 D.编译运行都正常,输出4 5. (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.salary = salary; } public intgetAge() { 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.println(name + “ work”); } } 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名年龄工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循环遍历,打印List 中所有工人的信息 5) 利用迭代遍历,对List 中所有的工人调用work 方法。 6) 为Worker 类添加equals 方法 6. (Set,Hash 算法)为上一题的Worker 类,在添加完equals 方法的基础上,添加一个 hashCode方法。 public inthashCode(){ //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 java.util.*; class Worker{ String name; int age; double salary; public Worker(){} public Worker(String name, int age, double salary){ this.name = name; this.age = age; this.salary = salary; } inthashCode(){ return name.hashCode() + age + salary; } public boolean equals(Worker w){ if (w.name == name &&w.salary == salary &&w.age == age){ return true; }else return false; } } public class TestWorker{ public 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)); System.out.println(set.size()); } } 8. (Set,Hash 算法)在前面的Worker 类基础上,为Worker 类增加相应的方法,使得Worker 放入HashSet中时,Set 中没有重复元素。 并编写相应的测试代码。 9. (Set,Comparable 接口)在前面的Worker 类基础上,为Worker 类添加相应的代码, 使得Worker 对象能正确放入HashSet中。并编写相应的测试代码。 注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两个工人年龄相同,则再 比较其收入,收入少的排前面。如果年龄和收入都相同,则根据字典顺序比较工人姓名。例 如:有三个工人,基本信息如下: 姓名年龄工资 zhang3 18 1500 li4 18 1500 wang5 18 1600 zhao6 17 2000 放入HashSet排序后结果为: zhao6 li4 zhang3 wang5 10. (Map)关于下列Map 接口中常见的方法 put 方法表示放入一个键值对,如果键已存在则________________,如果键不存在则 ______________。 remove 方法接受___个参数,表示__________________。 get 方法表示_______________________,get 方法的参数表示______,返回值表示_____。 要想获得Map 中所有的键,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的值,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的键值对的集合,应该使用方法___________,该方法返回一个 _______类型所组成的Set。 11. (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 12. (Map)已知某学校的教学课程内容安排如下: 完成下列要求: 1)使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。 2)增加了一位新老师Allen 教JDBC 3) Lucy 改为教CoreJava 4)遍历Map,输出所有的老师及老师教授的课程 5) *利用Map,输出所有教JSP 的老师。 13. (泛型)使用泛型,改写第5 题 14. (泛型)使用泛型和Map.Entry接口,改写第12 题的前4 问 15. *(List)写出下面程序的输出结果 import java.util.*; class MyClass{ int value; public MyClass(){} public MyClass(int value){ this.value = value; } public String toString(){ return “”+value; } } public class TestList{ public static void main(String args[]){ MyClass mc1 = new MyClass(10); MyClass mc2 = new MyClass(20); 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.value = 50; for(inti = 0; i 16. *(Set,HashSet,空指针)有下面代码 import java.util.*; class Student { int age; String name; public Student(){} public Student(String name, int age){ this.name = name; this.age = age; } public inthashCode(){ 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; Student stu = (Student) o; if (stu.name.equals(name) &&stu.age == age) return true; else return false; } } public class TestHashSet{ public 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.add(stu1); set.add(stu2); set.add(stu3); System.out.println(set.size()); } } 下列说法正确的是: A. 编译错误 B. 编译正确,运行时异常 C. 编译运行都正确,输出结果为3 D. 编译运行都正确,输出结果为2 17. *(Set)有如下两个类(只写了类的属性,请自行添加相应的构造方法和get/set 方法) 要求,完善Worker 和Address 类,使得Worker 对象能够正确放入HashSet中:即将 Worker 放入HashSet中时不会出现重复元素。并编写相应测试代码。 18. *(Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1994 2002 读入“荷兰”,应当输出 没有获得过世界杯 19. *(Map)设计Account 对象如下: 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: List list = new ArrayList(); list.add(new Account(10.00, “1234”)); list.add(new Account(15.00, “5678”)); list.add(new Account(0, “1010”)); 要求把List 中的内容放到一个Map 中,该Map 的键为id,值为相应的Account 对象。 最后遍历这个Map,打印所有Account 对象的id 和余额。 20. *(List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseList(list); //调用reverseList方法之后,list 为Learn World Hello 21. **(Map,Hash 算法)有如下代码: import java.util.*; class MyKey{ intkeyValue; public MyKey(){} public MyKey(int value){this.keyValue = value;} } class MyValue{ String value; public MyValue(){} public MyValue(String value){this.value = value;} public String toString(){return value;} } public class TestMap{ public 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(“cde”)); System.out.println(map.get(key1)); System.out.println(map.size()); } } 写出该代码的输出结果。 22. **(Id,hashCode,equals)为Worker 类增加id 属性,用来唯一标识一个员工。即:如 果员工的id 不同,则不管其姓名、年龄、工资是否相同,都认为是不同的员工。部分代 码如下: class Worker{ private final Long id; private String name; private double salary; private int age; //构造方法… //get/set 方法… public boolean equals(Object obj){ //1 此处仅判断id 是否相同 } public inthashCode(){ //2 此处返回hashCode } } 要求: 1)完善构造方法和get/set 方法。要求自动分配Worker 的id 2)完善equals 方法。要求仅判断id 是否相同 3) //2 处,如果写成 return (int)(name.hashCode() + id.hashCode() + age + salary); 是否正确?为什么? 23. **(综合)有如下Student 对象 其中,classNum表示学生的班号,例如“class05”。 有如下List Listlist = new ArrayList(); list.add(new Student(“Tom”, 18, 100, “class05”)); list.add(new Student(“Jerry”, 22, 70, “class04”)); list.add(new Student(“Owen”, 25, 90, “class05”)); list.add(new Student(“Jim”, 30,80 , “class05”)); list.add(new Student(“Steve”, 28, 66, “class06”)); list.add(new Student(“Kevin”, 24, 100, “class04”)); 在这个list 的基础上,完成下列要求: 1)计算所有学生的平均年龄 2)计算各个班级的平均分 24. **(综合)已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。 注:参赛球队列表见附录 注2:使用Math.random来产生随机数。 25. **(综合)写一个MyStack类,表示“栈”这种数据结构。 栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。其基 本操作为push 和pop。push 表示把一个元素加入栈顶,pop 表示把栈顶元素弹出。 示意图如下:
正在阅读:
集合框架练习03-08
东财激励机制在酒店管理中的应用12-27
蚂蚁世界真奇妙作文600字06-20
以前水墨画的基本表现技法06-01
四川省绵阳南山中学2015_2016学年高二英语4月月考试题05-06
生命的喜悦作文400字07-03
2011台湾省全国计算机等级考试二级VB笔试试卷及参考答案必过技巧04-25
青春励志格言,关于青春励志的格言警句大全02-10
2016-2017年新人教版五年级数学上册全册教案整理版05-31
六年级1班安全公约03-24
- 2015超星泛雅美术鉴赏答案
- 2011年二级建造师建设工程施工管理知识点归纳-精华
- 2015年黑龙江省龙东地区中考物理试卷和答案
- 大班幼儿绘画日记教育叙事研究
- 《Excel教程》模拟测试题二
- 月山镇电商博爱县创业孵化基地运营管理方案
- 2012年新人教版(2012秋)物理第六章第3节:测量物质的密度 - 图
- 2018-2024年中国医药品市场竞争态势及投资发展趋势预测报告(目
- 职工行为规范
- 尔雅生命安全与救援
- 情景模拟类(城管考试)
- 二年级下册《品德与生活》期末试卷
- 谷物烘干机使用说明书(300、500) - 图文
- 政务服务中心管理办公室工作汇报
- 实习指导记录表
- 档案目录
- 氯化物测定实验报告
- 汽车运行材料B卷
- 麻醉前病情评估制度
- 单证试题1