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;iSystem.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