java集合框架习题与答案.docx

上传人:b****7 文档编号:10131665 上传时间:2023-02-08 格式:DOCX 页数:36 大小:25.27KB
下载 相关 举报
java集合框架习题与答案.docx_第1页
第1页 / 共36页
java集合框架习题与答案.docx_第2页
第2页 / 共36页
java集合框架习题与答案.docx_第3页
第3页 / 共36页
java集合框架习题与答案.docx_第4页
第4页 / 共36页
java集合框架习题与答案.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

java集合框架习题与答案.docx

《java集合框架习题与答案.docx》由会员分享,可在线阅读,更多相关《java集合框架习题与答案.docx(36页珍藏版)》请在冰豆网上搜索。

java集合框架习题与答案.docx

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

HashSeths=newHashSet();

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();

}

Mapmap=newHashMap();

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

Mapmap=newTreeMap();

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");

Setset=map.keySet();

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

LinkedListll=newLinkedList();

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;

}

public

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1