一、填空题
1. Collection是所有单列集合的父接口,它定义了单列集合(List和Set)通用的一些方法。
2.使用Iterator遍历集合时,首先需要调用hashNext()方法判断是否存在下一个元素,若存在下一个元素,则调用next()方法取出该元素。
3.如果要对TreeSet集合中的对象进行排序,必须实现Comparable接口。
4.Map集合中的元素都是成对出现的,并且都是以key(键)、Value(值)的映射关系存在。
5.ArrayList内部封装了一个长度可变的数组。
二、判断题
1.Set集合是通过键值对的方式来存储对象的。错
2.ArrayList集合查询元素的速度很快,但是增删改查效率较低。对
3.Set接口主要有两个实现类,分别是HashSet和TreeSet。对
4.使用Collections工具类中的sort()方法可以对List集合进行排序。对
5.java.util.TreeMap底层结构是红黑树(二叉树),由此来保证存贮数据的键的唯一性。对
三、选择题
1.下列关于集合的描述中,错误的是(D )
A、集合按照存储结构可以分为单列集合Collection和双列集合Map
B、List集合的特点是元素有序、元素可重复
C、Set集合的特点是元素无序并且不可重复
D、集合存储的对象必须是基本数据类型
2.下列关于ArrayList的描述中,错误的是(D )
A、ArrayList集合可以看作一个长度可变的数组
B、ArrayList集合不适合做大量的增删操作
C、ArrayList集合查找元素非常便捷
D、ArrayList集合中的元素索引从1开始
3.下面关于java.util.HashMap类中的方法描述错误的是( C)
A、containsKey(Object key)表示如果此映射包含对于指定的键,则返回 true
B、remove(Object key)表示从此映射中移除指定键的映射关系(如果存在)
C、values()表示返回此映射所包含的键的Collection视图
D、size()表示返回此映射中的键-值映射关系数
4.使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法(A )
A、hasNext()
B、hash()
C、hasPrevious()
D、next()
5.阅读下面的代码:
public class Example{
public static void main(String[] args) {
String[] strs = { "Tom", "Jerry", "Donald"
};
// foreach循环遍历数组
for (String str : strs) {
str = "Tuffy"
}
System.out.println(strs[0]+ "," + strs[1] + "," + strs[2]);
}
}
程序的运行结果是( C )
A. Tom,Jerry
B. Tom,Jerry, Tuffy
C. Tom,Jerry,Donald
D. 以上都不对
简答题
1.简述集合List、Set和Map的区别。
List的特点是元素有序、可重复。List接口的主要实现类有ArrayList和LinkedList。
Set的特点是元素无序、不可重复。Set接口的主要实现类有HashSet和TreeSet。
Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。Map接口的主要实现类有HashMap和TreeMap。
2.简述为什么ArrayList的增删操作比较慢,查找操作比较快。
由于ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数组的结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很便捷。
编程题
1. 编写一个程序,向ArrayList集合中添加元素,然后遍历输出这些元素。
import java. util. *;
public class Example {
public static void main(String[]args) {
ArrayList list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
Iterator it=list.iterator();
while(it.hasNext()) {
Object obj=it. next();
System.out.println(obj);
}
}
}
或
import java. util. *;
public class Example {
public static void main(String[]args) {
ArrayList list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
for(Iterator it=list.iterator();
it.hasNext();) {
System.out.println(it.next());
}
}
}
2. 请按照下列要求编写程序。
(1) 编写一个Student类,包含name和age属性,提供有参构造方法。
(2) 在Student类中,重写toString()方法,输出age和name的值。
(3) 在Student类中,重写hashCode()和equals()方法
hashCode()的返回值是name的hash值与age的和。
equals()判断对象的name和age是否相同,相同则返回true不同返回false。
(4)最后编写一个测试类,创建一个HashSet<Student>对象hs,向hs中添加多个Student对象,假设有两个Student对象相等,输出HashSet,观察是否添加成功。
import java.util.*;
class Student {
private int age;
private String name;
public Student(int age,String name) {
this.age=age;
this.name=name;
}
public String toString() {
return age+":"+name;
}
public int hashCode() {
return name.hashCode()+age;
}
public boolean equals(Object obj) {
if(this==obj)
return true;
if(!(obj instanceof Student))
return false;
Student stu=(Student)obj;
return this.name.equals(stu.name)&&this.age==stu.age;
}
}
public class Test {
public static void main(String[]args) {
HashSet<Student>hs=new HashSet<Student>();
hs.add(new Student(18,"zhangsan"));
hs.add(new Student(20,"lisa"));
hs.add(new Student(20,"lisa"));
hs. add(new Student(10,"lisa"));
System.out.println(hs);
}
}