java 集合框架(习题与答案)

余年寄山水
541次浏览
2021年01月19日 12:08
最佳经验
本文由作者推荐

-开张花篮

2021年1月19日发(作者:纪英林)

java
集合框架(习题)


集合框架

Key Point
* Collection
接口、
Set
接口、
List
接口基本操作

* List
接口及其实现类

* Set
接口及其实现类

*
迭代遍历

* Hash
算法与
hashCode
方法

* Comparable
接口

* Map
接口及其实现类

*
遍历
Map
*
泛型

练习

1.
填空

Collection
接口的特点是元素是对象;

List
接 口的特点是元素有(有
|
无)顺序,可以(可以
|
不可以)重复;

Set
接口的特点是元素无(有
|
无)顺序,不可以(可以
|不可以)重复;

Map
接口的特点是元素是键值对,其中值可以重复,键不可以重复。

2.

List
)有如下代码

import .*;
public class TestList{
public static void main(String args[]){
List list = new ArrayList();
(“Hello”);

(“World”);

(1, “Learn”);

(1, “Java”);

printList(list);
}
public static void printList(List list){
for(Object obj:list){
String str=(String)obj;
n(obj);

}
}
}
要求:

1)

//1
处的代码补充完整,要求输出
list
中所有元素的内容

2)
写出程序执行的结果



Hello java Learn World
3)
如果要把实现类由
ArrayList
换为
LinkedList
,应该改哪里?
ArrayList


LinkedList
使用上有什么区别?实现上有什么区别?



把实例化的语句改为
new LinkedList();
ArrayList


数组实现



查询快




增删慢

LinkedList

链表实现



查询慢




增删快

4)
如果要把实现类由
ArrayList
换为
Vector
,应该改哪里?
ArrayList

Vector
使

用上有什么区别?实现上有什么区别?


ArrayList
是线程不同步的,轻量级的,线程不安全,速度快


Vector
是线程同步的

,多线程访问比较安全,速度慢


3.

List
)写出下面程序的运行结果

import .*;
public class TestList{
public static void main(String args[]){
List list = new ArrayList();
(“Hello”);

(“World”);

(“Hello”);

(“Learn”);

(“Hello”);

(0);
for(int i = 0; i<(); i++){
n((i));
}
}
}

Hello

Learn
4.

Set

List


import .*;
public class TestListSet{
public static void main(String args[]){
List list = new ArrayList();
(“Hello”);

(“Learn”);

(“Hello”);

(“Welcome”);

Set set = new HashSet();
(list);
n(());
}
}
选择正确答案

A


编译不通过


B


编译通过,运行时异常

C


编译运行都正常,
//
输出
HashSet
中不能放重复值

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){
= name;
= age;
= salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
= age;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public double getSalary(){
return salary;
}
public void setSalary(double salary){
= salary;
}
public void work(){
n(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 int hashCode(){
//1
}
有几种写法:

1


return 0;
2


int result = 0;
if (name != null) result = de();
return result + age;
3


return de();
现在要把
Worker
类放入
HashSet
中,并希望在
HashSet
中没有重复元素,则下面说法正

确的是:

A.
三种写法都正确

B. 1), 2)
写法正确,
2)
效率更高

C. 2)
写法正确,
1),3)
写法都不正确

7.

Set

Hash
算法,方法覆盖)代码改错

import .*;
class Worker{
String name;
int age;
double salary;
public Worker(){}
public Worker(String name, int age, double salary){
= name;
= age;
= salary;
}
public int hashCode(){//hashCode
必须声明为公共的。

return

int


de() + age + salary

;//
返回值类型为整形(

}
//equals
方法实现有错

public boolean equals(Worker w){
if ( == name && == salary && == age){
return true;
}else return false;
}
}
public class TestWorker{
public static void main(String args[]){

Set set = new HashSet();
(new Worker(“tom”, 18, 2000));

(new Worker(“tom”, 18, 2000));

(0, new Worker(

jerry

, 18, 2000));//HashSet
中没有定义带下标的
add
方法。

n(());
}
}
8.

Set

Hash
算法)在前面的
Worker
类基础上,为
Worker
类增加相应的方法,使得
Worker
放入
HashSet
中时,
Set
中没有重复元素。

并编写相应的测试代码。


class Worker{
String name;
int age;
double salary;
public Worker(){}
public Worker(String name, int age, double salary){
= name;
= age;
= salary;
}
public int hashCode(){
return

int


de() + age + salary

;

}
public boolean equals(Worker w){
if ( == name && == salary && == age){
return true;
}else return false;
}
}

9.

Set

Comparable
接口)在前面的
Worker
类基础上,为
Worker
类添加相应的代码,

使得
Worker
对象能正确放入
TreeSet
中。并编写相应的测试代码。

注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两个工人年龄相同,则再

比较其收入,收入少的排前面。
如果年龄和收入都相同,
则根据字典顺序比较工人姓名。

如:有三个工人,基本信息如下:

姓名

年龄

工资

zhang3 18 1500
li4 18 1500
wang5 18 1600
zhao6 17 2000
放入
TreeSet
排序后结果为:

zhao6 li4 zhang3 wang5


import t;




public class Test1 {













public static void main(String[] args) {








// TODO Auto-generated method stub









HashSet hs=new HashSet();









Worker w1=new Worker(









Worker w2=new Worker(









Worker w3=new Worker(









Worker w4=new Worker(









(w1);









(w2);









(w3);









(w4);









n(());









n(hs);





}




}

class Worker implements Comparable{






String name;





int age;





double salary;





public Worker(){}





public Worker(String name, int age, double salary){





= name;





= age;





= salary;





}















@Override





public int compareTo(Worker o) {








// TODO Auto-generated method stub








if(!=){












return








}








else if(!=){












//Integer integer1=new Integer()












return new Double().compareTo(new Double());








}








else if(()){













return eTo();








}








return 0;





}





@Override





public int hashCode() {








final int prime = 31;








int result = 1;








result = prime * result + age;








result = prime * result + ((name == null) ? 0 : de());








long temp;








temp = ToLongBits(salary);








result = prime * result + (int) (temp ^ (temp >>> 32));








return result;





}





@Override





public boolean equals(Object obj) {








if (this == obj)












return true;








if (obj == null)












return false;








if (getClass() != ss())













return false;








Worker other = (Worker) obj;








if (age != )












return false;








if (name == null) {












if ( != null)















return false;








} else if (!())












return false;








if (ToLongBits(salary) != Double















.doubleToLongBits())












return false;








return true;





}





@Override





public String toString() {








// TODO Auto-generated method stub








return age+





}





}






10.

Map
)关于下列
Map
接口中常见的方法

put
方法表示放入一个键值对,如果键已存在则新值替换旧值,如果键不存在则

增加一个键值对。

remove
方法接受一个参数,表示从映射中移除其映射关系的键。

get
方法表示返回指定键所映射的值,
get
方法的参数表示移除的其映射关系的键,返 回值
表示与
key
关联的值。

要想获得
Map
中所有的键,应该使用方法
ketSet
,该方法返回值类型为
Set
集合。

要想获得
Map
中所有的值,应该使用方法
get
,该方法返回值类型为指定键所映射的值。

要想获得
Map
中所有的键值对的集合,应该使用方法
entrySet
,该方法返回一个


类型所组成的
Set


11.

Map
)利用
Map
,完成下面的功能:

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该

年没有举办世界杯,则输出:没有举办世界杯。

附:世界杯冠军以及对应的夺冠年份,请参考本章附录。


public class Bk18 {













public static void main(String[] args) {








// TODO Auto-generated method stub









BufferedReader br=new BufferedReader(new InputStreamReader());









String year=null;









try {












year=ne();








} catch (IOException e) {












// TODO Auto- generated catch block












tackTrace();








}








Map map=new HashMap();








(
巴西










(
意大利









(
南非









if(nsKey(year)){












n((year));








}








else{












n(
这一年没有承办世界杯!









}





}




}


12.

Map
)已知某学校的教学课程内容安排如下:


集< br>合







o:button =
target=
href=
/orignal/714a8371t9dbaa80 ef64e








< br>src=
>

完成下列要求:

1

< br>使用一个
Map
,以老师的名字作为键,以老师教授的课程名作为值,表示上述

课程安排。

2


增加了一位新老师
Allen

JDBC
3


Lucy
改为教
CoreJava
4


遍历
Map
,输出所有的老师及老师教授的课程

5


*
利用
Map
,输出所有教
JSP
的老师。


public static void main(String[] args) {








// TODO Auto-generated method stub













Map map=new TreeMap();












(












(












(












(












(












(












(












n(());












(












n(());












(












(












Set set=();












for(Object obj:set){












n(((String)obj));












}











for(String str:set){












if((str).equals(

















n(

JSP
的老师有:













}












}

















}
13.
(泛型)使用泛型,改写第
5



package list;




import or;

import List;




public class Test2 {













public static void main(String[] args) {








// TODO Auto- generated method stub









LinkedList ll=new LinkedList();









Worker1 w1=new Worker1(









Worker1 w2=new Worker1(









Worker1 w3=new Worker1(









(w1);









(w2);









(w3);









(1, new Worker1(









(w3);









//

for
循环遍历











for(int i=0;i<();i++){









n((i));









}









n(









//
用迭代器遍历










Iterator iterator=or();









while(t()){









n(());









}





}




}


class Worker1 {





private int age;





private String name;





private double salary;





public Worker1 (){}





public Worker1 (String name, int age, double salary){





= name;





= age;





= salary;





}






public int getAge() {





return age;





}





public void setAge(int age) {





= age;





}





public String getName() {





return name;





}





public void setName(String name) {





= name;





}





public double getSalary(){





return salary;





}





public void setSalary(double salary){





= salary;





}





public void work(){





n(name +





}




-开张花篮


-开张花篮


-开张花篮


-开张花篮


-开张花篮


-开张花篮


-开张花篮


-开张花篮