java集合框架习题与答案资料.docx
- 文档编号:10461191
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:35
- 大小:24.18KB
java集合框架习题与答案资料.docx
《java集合框架习题与答案资料.docx》由会员分享,可在线阅读,更多相关《java集合框架习题与答案资料.docx(35页珍藏版)》请在冰豆网上搜索。
java集合框架习题与答案资料
java集合框架(习题)
集合框架
KeyPoint
*Collection接口、Set接口、List接口基本操作
*List接口及其实现类
*Set接口及其实现类
*迭代遍历
*Hash算法与hashCode方法
*Comparable接口
*Map接口及其实现类
*遍历Map
*泛型
练习
1.填空
Collection接口的特点是元素是对象;
List接口的特点是元素有(有|无)顺序,可以(可以|不可以)重复;
Set接口的特点是元素无(有|无)顺序,不可以(可以|不可以)重复;
Map接口的特点是元素是键值对,其中值可以重复,键不可以重复。
2.(List)有如下代码
importjava.util.*;
publicclassTestList{
publicstaticvoidmain(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)把//1处的代码补充完整,要求输出list中所有元素的内容
2)写出程序执行的结果HellojavaLearnWorld
3)如果要把实现类由ArrayList换为LinkedList,应该改哪里?
ArrayList和
LinkedList使用上有什么区别?
实现上有什么区别?
把实例化的语句改为newLinkedList();
ArrayList数组实现查询快增删慢
LinkedList链表实现查询慢增删快
4)如果要把实现类由ArrayList换为Vector,应该改哪里?
ArrayList和Vector使
用上有什么区别?
实现上有什么区别?
ArrayList是线程不同步的,轻量级的,线程不安全,速度快
Vector是线程同步的,多线程访问比较安全,速度慢
3.(List)写出下面程序的运行结果
importjava.util.*;
publicclassTestList{
publicstaticvoidmain(Stringargs[]){
Listlist=newArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“Hello”);
list.add(“Learn”);
list.remove(“Hello”);
list.remove(0);
for(inti=0;i System.out.println(list.get(i)); } } } Hello Learn 4.(Set,List) importjava.util.*; publicclassTestListSet{ publicstaticvoidmain(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.编译运行都正常,输出4 5.(List)已知有一个Worker类如下: publicclassWorker{ privateintage; privateStringname; privatedoublesalary; publicWorker(){} publicWorker(Stringname,intage,doublesalary){ this.name=name; this.age=age; this.salary=salary; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicdoublegetSalary(){ returnsalary; } publicvoidsetSalary(doublesalary){ this.salary=salary; } publicvoidwork(){ System.out.println(name+“work”); } } 完成下面的要求 1)创建一个List,在List中增加三个工人,基本信息如下: 姓名年龄工资 zhang3183000 li4253500 wang5223200 2)在li4之前插入一个工人,信息为: 姓名: zhao6,年龄: 24,工资3300 3)删除wang5的信息 4)利用for循环遍历,打印List中所有工人的信息 5)利用迭代遍历,对List中所有的工人调用work方法。 6)为Worker类添加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(); 现在要把Worker类放入HashSet中,并希望在HashSet中没有重复元素,则下面说法正 确的是: A.三种写法都正确 B.1),2)写法正确,2)效率更高 C.2)写法正确,1),3)写法都不正确 7.(Set,Hash算法,方法覆盖)代码改错 importjava.util.*; classWorker{ Stringname; intage; doublesalary; publicWorker(){} publicWorker(Stringname,intage,doublesalary){ this.name=name; this.age=age; this.salary=salary; } publicinthashCode(){//hashCode必须声明为公共的。 return(int)(name.hashCode()+age+salary);//返回值类型为整形( } //equals方法实现有错 publicbooleanequals(Workerw){ if(w.name==name&&w.salary==salary&&w.age==age){ returntrue; }elsereturnfalse; } } publicclassTestWorker{ publicstaticvoidmain(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,Hash算法)在前面的Worker类基础上,为Worker类增加相应的方法,使得Worker 放入HashSet中时,Set中没有重复元素。 并编写相应的测试代码。 classWorker{ Stringname; intage; doublesalary; publicWorker(){} publicWorker(Stringname,intage,doublesalary){ this.name=name; this.age=age; this.salary=salary; } publicinthashCode(){ return(int)(name.hashCode()+age+salary); } publicbooleanequals(Workerw){ if(w.name==name&&w.salary==salary&&w.age==age){ returntrue; }elsereturnfalse; } } 9.(Set,Comparable接口)在前面的Worker类基础上,为Worker类添加相应的代码, 使得Worker对象能正确放入TreeSet中。 并编写相应的测试代码。 注: 比较时,先比较工人年龄大小,年龄小的排在前面。 如果两个工人年龄相同,则再 比较其收入,收入少的排前面。 如果年龄和收入都相同,则根据字典顺序比较工人姓名。 例 如: 有三个工人,基本信息如下: 姓名年龄工资 zhang3181500 li4181500 wang5181600 zhao6172000 放入TreeSet排序后结果为: zhao6li4zhang3wang5 importjava.util.HashSet; publicclassTest1{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub HashSet Workerw1=newWorker("zhang3",18,1500); Workerw2=newWorker("lis4",18,1500); Workerw3=newWorker("wang5",18,1600); Workerw4=newWorker("zhao6",17,2000); hs.add(w1); hs.add(w2); hs.add(w3); hs.add(w4); System.out.println(hs.size()); System.out.println(hs); } } classWorkerimplementsComparable Stringname; intage; doublesalary; publicWorker(){} publicWorker(Stringname,intage,doublesalary){ this.name=name; this.age=age; this.salary=salary; } @Override publicintcompareTo(Workero){ //TODOAuto-generatedmethodstub if(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(this.name.equals(o.name)){ returnpareTo(o.name); } return0; } @Override publicinthashCode(){ finalintprime=31; intresult=1; result=prime*result+age; result=prime*result+((name==null)? 0: name.hashCode()); longtemp; temp=Double.doubleToLongBits(salary); result=prime*result+(int)(temp^(temp>>>32)); returnresult; } @Override publicbooleanequals(Objectobj){ if(this==obj) returntrue; if(obj==null) returnfalse; if(getClass()! =obj.getClass()) returnfalse; Workerother=(Worker)obj; if(age! =other.age) returnfalse; if(name==null){ if(other.name! =null) returnfalse; }elseif(! name.equals(other.name)) returnfalse; if(Double.doubleToLongBits(salary)! =Double .doubleToLongBits(other.salary)) returnfalse; returntrue; } @Override publicStringtoString(){ //TODOAuto-generatedmethodstub returnage+"/"+salary+"/"+name; } } 10.(Map)关于下列Map接口中常见的方法 put方法表示放入一个键值对,如果键已存在则新值替换旧值,如果键不存在则 增加一个键值对。 remove方法接受一个参数,表示从映射中移除其映射关系的键。 get方法表示返回指定键所映射的值,get方法的参数表示移除的其映射关系的键,返回值表示与key关联的值。 要想获得Map中所有的键,应该使用方法ketSet,该方法返回值类型为Set集合。 要想获得Map中所有的值,应该使用方法get,该方法返回值类型为指定键所映射的值。 要想获得Map中所有的键值对的集合,应该使用方法entrySet,该方法返回一个 Map.Entry类型所组成的Set。 11.(Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。 如果该 年没有举办世界杯,则输出: 没有举办世界杯。 附: 世界杯冠军以及对应的夺冠年份,请参考本章附录。 publicclassBk18{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); Stringyear=null; try{ year=br.readLine(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } Map map.put("2002","巴西"); map.put("2006","意大利"); map.put("2010","南非"); if(map.containsKey(year)){ System.out.println(map.get(year)); } else{ System.out.println("这一年没有承办世界杯! "); } } } 12.(Map)已知某学校的教学课程内容安排如下: 集合框架(习题)"o: button="t"target="_blank"href="src="file: ///C: \DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image002.png"> 完成下列要求: 1)使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。 2)增加了一位新老师Allen教JDBC 3)Lucy改为教CoreJava 4)遍历Map,输出所有的老师及老师教授的课程 5)*利用Map,输出所有教JSP的老师。 publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Map 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()); map.remove("Lucy"); map.put("Lucy","CoreJava"); Set for(Objectobj: set){ System.out.println(map.get((String)obj)); } for(Stringstr: set){ if(map.get(str).equals("JSP")){ System.out.println("教JSP的老师有: "+str); } } } 13.(泛型)使用泛型,改写第5题 packagelist; importjava.util.Iterator; importjava.util.LinkedList; publicclassTest2{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub LinkedList 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循环遍历 for(inti=0;i System.out.println(ll.get(i)); } System.out.println("=================="); //用迭代器遍历 Iteratoriterator=ll.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } } classWorker1{ privateintage; privateStringname; privatedoublesalary; publicWorker1(){} publicWorker1(Stringname,intage,doublesalary){ this.name=name; this.age=age; this.salary=salary; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicdoublegetSalary(){ returnsalary; } publi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 集合 框架 习题 答案 资料