|
6 | 6 | 我们将在接下来的三章中继续研究三种主要的集合,但我们首先应该解释大多数集合实现共享的两种常见的构造方法。 以 `HashSet` 为例,它们是:
|
7 | 7 |
|
8 | 8 | ```java
|
9 | | -public HashSet() |
10 | | -public HashSet(Collection<? extends E> c) |
| 9 | +public HashSet() |
| 10 | +public HashSet(Collection<? extends E> c) |
11 | 11 | ```
|
12 | 12 |
|
13 | | -其中第一个创建一个空集,第二个集包含任何参数类型或其子类型集合的元素。使用这个构造函数与使用默认构造函数创建一个空集具有相同的效果,然后使用 `addAll` 添加集合的内容。这有时被称为"复制构造函数",但该术语应该保留给构造函数,该构造函数复制同一类的对象,而第二种形式的构造函数可以接受任何实现接口 `Collection <? extends E>。 `Joshua Bloch` 建议使用术语"转换构造函数"。 |
| 13 | +其中第一个创建一个空集,第二个集包含任何参数类型或其子类型集合的元素。使用这个构造函数与使用默认构造函数创建一个空集具有相同的效果,然后使用 `addAll` |
| 14 | +添加集合的内容。这有时被称为"复制构造函数",但该术语应该保留给构造函数,该构造函数复制同一类的对象,而第二种形式的构造函数可以接受任何实现接口 |
| 15 | +`Collection <? extends E>`。 `Joshua Bloch` 建议使用术语"转换构造函数"。 |
14 | 16 |
|
15 | | -并非所有集合类都具有这两种形式的构造函数 - 例如,`ArrayBlockingQueue` 不能在未修复其容量的情况下创建,并且 `SynchronousQueue` 根本不能容纳任何元素,因此不需要第二种形式的构造函数。另外,许多集合类除了这两个以外还有其他构造函数,但是它们所拥有的不是它们所实现的接口,而是取决于底层实现;这些额外的构造函数用于配置实现。 |
| 17 | +并非所有集合类都具有这两种形式的构造函数 - 例如,`ArrayBlockingQueue` 不能在未修复其容量的情况下创建,并且 `SynchronousQueue` 根本不能容纳任何元素, |
| 18 | +因此不需要第二种形式的构造函数。另外,许多集合类除了这两个以外还有其他构造函数,但是它们所拥有的不是它们所实现的接口,而是取决于底层实现;这些额外的构造 |
| 19 | +函数用于配置实现。 |
16 | 20 |
|
17 | 21 | 《《《 [下一节](../ch13/00_Sets.md) <br/>
|
18 | | -《《《 [返回首页](../README.md) |
| 22 | +《《《 [返回首页](../README.md) |
0 commit comments