第七章 集合类

一、填空题

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());
        }
    }
}

ec74050016a34b0eab17c7950111d4de.jpg

 

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);

    }

}

b47051d39b004b5eac272f9de30d5dc9.jpg

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值