java 集合框架(习题)
集合框架
Key Point
* Collection接口、Set 接口、List 接口基本操作
* List 接口及其实现类
* Set 接口及其实现类
* 迭代遍历
* Hash 算法与hashCode方法
* Comparable接口
* Map 接口及其实现类
* 遍历Map
* 泛型
练习
1. 填空
Collection接口的特点是元素是对象;
List 接口的特点是元素有(有|无)顺序,可以(可以|不可以)重复;
Set 接口的特点是元素无(有|无)顺序,不可以(可以|不可以)重复;Map 接口的特点是元素是键值对,其中值可以重复,键不可以重复。
2. (List)有如下代码
import java.util.*;
public classTestLi st{
public static void main(String args[]){
List list = new ArrayL ist();
list.add(“Hello”);
list.add(“World”);
list.add(1, “Learn”);
list.add(1,“Java”);
printL ist(list);
}
public static void printL ist(List list){
for(Object obj:list){
String str=(String)obj;
System.out.printl n(obj);
}
}
}
要求:
1) 把//1 处的代码补充完整,要求输出li s t 中所有元素的内容
2) 写出程序执行的结果Helloj ava LearnW orld
3) 如果要把实现类由ArrayLis t换为Link edLis t,应该改哪里?A rrayLi st 和Linked List使用上有什么区别?实现上有什么区别?
把实例化的语句改为ne w LinkedLi st();
ArrayLi st 数组实现查询快增删慢
Linked List链表实现查询慢增删快
4) 如果要把实现类由ArrayLis t换为V ect or,应该改哪里?A rrayLi st 和V ecto r 使用上有什么区别?实现上有什么区别?
ArrayLi st是线程不同步的,轻量级的,线程不安全,速度快
V ector是线程同步的,多线程访问比较安全,速度慢
3. (List)写出下面程序的运行结果
import java.util.*;
public classTestLi st{
public static void main(String args[]){
List list = new ArrayL ist();
list.add(“Hello”);
list.add(“World”);
list.add(“Hello”);
list.add(“Learn”);
for(int i = 0; i<list.size(); i++){
System.out.printl (i));
}
}
}
Hello
Learn
4. (Set,List)
import java.util.*;
public classTestLi stSet{
public static void main(String args[]){
List list = new ArrayL ist();
list.add(“Hello”);
list.add(“Learn”);
list.add(“Hello”);
list.add(“Welcom e”);
Set set = new HashSe t();
set.addAll(list);
System.out.printl n(set.size());
}
}
选择正确答案
A.编译不通过
B.编译通过,运行时异常
C.编译运行都正常,//输出Hash Set中不能放重复值
D.编译运行都正常,输出4
5. (List)已知有一个W o rker类如下:
public classWorker {
privat e int age;
privat e String name;
privat e double salary;
public Worker (){}
public Worker (String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNam e() {
return name;
}
public void setNam e(String name) {
this.name = name;
}
public double getSal ary(){
return salary;
}
public void setSal ary(double salary){
this.salary = salary;
}
public void work(){
System.out.printl n(name+“work”);
}
}
完成下面的要求
1) 创建一个Li s t,在List中增加三个工人,基本信息如下:
姓名年龄工资
zhang3 18 3000
li4 25 3500
wang522 3200
2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
3) 删除wang5 的信息
4) 利用for循环遍历,打印List中所有工人的信息
5) 利用迭代遍历,对List中所有的工人调用work 方法。
6) 为Worke r 类添加equ al s 方法
6. (Set,Hash 算法)为上一题的W o rker类,在添加完eq ual s方法的基础上,添加一个hashCo de 方法。
public int hashCo de(){
//1
}
有几种写法:
1)return 0;
2)
int result = 0;
if (name != null) result = name.hashCo de();
return result + age;
3)return super.hashCo de();
现在要把Wo rker类放入HashSet中,并希望在Ha shSet中没有重复元素,则下面说法正确的是:
A. 三种写法都正确
B. 1), 2)写法正确,2)效率更高
C. 2)写法正确,1),3)写法都不正确
7. (Set,Hash 算法,方法覆盖)代码改错
import java.util.*;
classWorker{
String name;
int age;
double salary;
public Worker(){}
public Worker(String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public i nt hashCo de(){//hashCo de必须声明为公共的。
return(int)(name.hashCo de() + age + salary);//返回值类型为整形(
}
//equals方法实现有错
public boolea n equals(Worker w){
if (w.name == name && w.salary == salary && w.age == age){
return true;
}else return false;
java集合排序怎么实现}
}
public classTestWo rker{
public static void main(String args[]){
Set set = new HashSe t();
set.add(new Worker(“tom”,18,2000));
set.add(new Worker(“tom”,18,2000));
set.add(0, new Worker(“jerry”, 18, 2000));//HashSe t中没有定义带下标的a dd方法。System.out.printl n(set.size());
}
}
8. (Set,Hash 算法)在前面的Wo rker类基础上,为Worke r 类增加相应的方法,使得Work er
放入Hash Set 中时,Set 中没有重复元素。
并编写相应的测试代码。
classWorker{
String name;
int age;
double salary;
public Worker(){}
public Worker(String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public int hashCo de(){
return(int)(name.hashCo de() + age + salary);
}
public boolea n equals(Worker w){
if (w.name == name && w.salary == salary && w.age == age){
return true;
}else return false;
}
}
9. (Set,Comparable接口)在前面的Wo rker类基础上,为Worke r 类添加相应的代码,使得Work er 对象能正确放入Tree Set 中。并编写相应的测试代码。
注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两个工人年龄相同,则再
比较其收入,收入少的排前面。如果年龄和收入都相同,则根据字典顺序比较工人姓名。例如:有三个工人,基本信息如下:
姓名年龄工资
zhang3 18 1500
li4 18 1500
wang518 1600
zhao617 2000
放入Tree Set 排序后结果为:
zhao6li4 zhang3 wang5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论