# 问题和练习：接口

> 原文： [https://docs.oracle.com/javase/tutorial/collections/interfaces/QandE/questions.html](https://docs.oracle.com/javase/tutorial/collections/interfaces/QandE/questions.html)

## 问题

1.  在本课程开始时，您了解到核心集合接口被组织为两个不同的继承树。特别是一个接口不被认为是真正的`Collection`，因此位于其自己的树的顶部。这个接口的名称是什么？
2.  集合框架中的每个接口都使用`&lt;E&gt;`语法声明，它告诉您它是通用的。声明`Collection`实例时，指定它将包含的对象类型有什么好处？
3.  什么接口表示不允许重复元素的集合？
4.  什么接口形成集合层次结构的根？
5.  什么接口表示可能包含重复元素的有序集合？
6.  什么接口表示在处理之前保存元素的集合？
7.  什么接口表示将键映射到值的类型？
8.  什么接口代表双端队列？
9.  列举三种不同的方法来迭代`List`的元素。
10.  对错：聚合操作是修改底层集合的可变操作。

## 演习

1.  编写一个以随机顺序打印其参数的程序。不要复制参数数组。演示如何使用流和传统的增强 for 语句打印出元素。
2.  取 [`FindDups`](../examples/FindDups.java) 示例并修改它以使用`SortedSet`而不是`Set`。指定`Comparator`，以便在排序和标识集合元素时忽略大小写。
3.  编写一个采用`List&lt;String&gt;`并将 [`String.trim`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#trim--) 应用于每个元素的方法。
4.  考虑四个核心接口，`Set`，`List`，`Queue`和`Map`。对于以下四个分配中的每一个，指定四个核心接口中哪一个最适合，并解释如何使用它来实现分配。
    1.  异想天开的玩具公司（WTI）需要记录其所有员工的姓名。每个月，将从这些记录中随机选择一名员工以获得免费玩具。
    2.  WTI 已决定每个新产品将以员工命名，但仅使用名字，每个名称仅使用一次。准备一份独特的名字。
    3.  WTI 决定只想使用最受欢迎的玩具名称。计算拥有每个名字的员工数量。
    4.  WTI 获得当地长曲棍球队的季票，由员工共享。为这项受欢迎的运动创建一个等待名单。

[检查你的答案。](answers.html)