System.out.println(list.get(i));
}
}
}
16.*(Set,HashSet,空指针)有下面代码
importjava.util.*;
classStudent{
intage;
Stringname;
publicStudent(){}
publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}
publicinthashCode(){
returnname.hashCode()+age;
}
publicbooleanequals(Objecto){
if(o==null)
returnfalse;
if(o==this)
returntrue;
if(o.getClass()!
=this.getClass())
returnfalse;
Studentstu=(Student)o;
if(stu.name.equals(name)&&stu.age==age)
returntrue;
else
returnfalse;
}
}
publicclassTestHashSet{
publicstaticvoidmain(Stringargs[]){
Setset=newHashSet();
Studentstu1=newStudent();
Studentstu2=newStudent(“Tom”,18);
Studentstu3=newStudent(“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的基础上,增加如下功能:
读入一支球队的名字,输出该球队夺冠的年份列表。
例如,读入“巴西”,应当输出
19581962197019942002
读入“荷兰”,应当输出
没有获得过世界杯
19.*(Map)设计Account对象如下:
要求完善设计,使得该Account对象能够自动分配id。
给定一个List如下:
Listlist=newArrayList();
list.add(newAccount(10.00,“1234”));
list.add(newAccount(15.00,“5678”));
list.add(newAccount(0,“1010”));
要求把List中的内容放到一个Map中,该Map的键为id,值为相应的Account对象。
最后遍历这个Map,打印所有Account对象的id和余额。
20.*(List)写一个函数reverseList,该函数能够接受一个List,然后把该List倒序排列。
例如:
Listlist=newArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“Learn”);//此时list为HelloWorldLearn
reverseList(list);
//调用reverseList方法之后,list为LearnWorldHello
21.**(Map,Hash算法)有如下代码:
importjava.util.*;
classMyKey{
intkeyValue;
publicMyKey(){}
publicMyKey(intvalue){
this.keyValue=value;
}
}
classMyValue{
Stringvalue;
publicMyValue(){}
publicMyValue(Stringvalue){
this.value=value;
}
publicStringtoString(){
returnvalue;
}
}
publicclassTestMap{
publicstaticvoidmain(Stringargs[]){
Mapmap=newHashMap();
MyKeykey1=newMyKey(10);
map.put(key1,newMyValue(“abc”));
map.put(newMyKey(10),newMyValue(“cde”));
System.out.println(map.get(key1));
System.out.println(map.size());
}
}
写出该代码的输出结果。
22.**(Id,hashCode,equals)为Worker类增加id属性,用来唯一标识一个员工。
即:
如果员工的id不同,则不管其姓名、年龄、工资是否相同,都认为是不同的员工。
部分代
码如下:
classWorker{
privatefinalLongid;
privateStringname;
privatedoublesalary;
privateintage;
//构造方法…
//get/set方法…
publicbooleanequals(Objectobj){
//1此处仅判断id是否相同
}
publicinthashCode(){
//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=newArrayList();
list.add(newStudent(“Tom”,18,100,“class05”));
list.add(newStudent(“Jerry”,22,70,“class04”));
list.add(newStudent(“Owen”,25,90,“class05”));
list.add(newStudent(“Jim”,30,80,“class05”));
list.add(newStudent(“Steve”,28,66,“class06”));
list.add(newStudent(“Kevin”,24,100,“class04”));
在这个list的基础上,完成下列要求:
1)计算所有学生的平均年龄
2)计算各个班级的平均分
24.**(综合)已知有十六支男子足球队参加2008北京奥运会。
写一个程序,把这16支球队随机分为4个组。
注:
参赛球队列表见附录
注2:
使用Math.random来产生随机数。
25.**(综合)写一个MyStack类,表示“栈”这种数据结构。
栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。
其基
本操作为push和pop。
push表示把一个元素加入栈顶,pop表示把栈顶元素弹出。
示意图如下:
栈的特点:
先进后出。
栈的基本操作:
1)push(Objecto):
表示把元素放入栈
2)Objectpop():
返回栈顶元素,并把该元素从栈中删除。
如果栈为空,则返回null值
3)Objectpeek():
返回栈顶元素,但不把该元素删除。
如果栈为空,则返回null值。
4)booleanisEmpty():
判断该栈是否为空
5)intsize():
返回该栈中元素的数量
要求:
1)利用List,实现栈。
2)讨论:
应当用ArrayList作为实现类还是用LinkedList?
为什么?
附录
1.截止到2009年为止,历届世界杯冠军
2.2008北京奥运会男足参赛国家:
科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西
兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利