Skip to content
Prev Previous commit
Next Next commit
添加上下文链接
  • Loading branch information
maskleo committed Apr 19, 2018
commit d2067b690f026ebda520b7745efef29b73201026
8 changes: 7 additions & 1 deletion ch11/00_Preliminaries.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](../ch10/01_The_Main_Interfaces_of_the_Java.md)

## 初步措施

在本章中,在深入讨论集合本身的细节之前,我们将花时间讨论框架的基本概念。
在本章中,在深入讨论集合本身的细节之前,我们将花时间讨论框架的基本概念。

《《《 [下一节](01_Iterable_and_Iterators.md) <br/>
《《《 [返回首页](../README.md)
20 changes: 5 additions & 15 deletions ch11/01_Iterable_and_Iterators.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](00_Preliminaries.md)

## 可迭代和迭代器

迭代器是实现接口迭代器的对象
Expand Down Expand Up @@ -73,18 +76,5 @@ public Iterator<E> {

并发集合有处理并发修改的其他策略,例如弱一致的迭代器。 我们在第 `11.5` 节更详细地讨论它们。
















《《《 [下一节](02_Implementations.md) <br/>
《《《 [返回首页](../README.md)
5 changes: 5 additions & 0 deletions ch11/02_Implementations.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](01_Iterable_and_Iterators.md)

## 实现

我们简要地看了一下集合框架的接口,这些接口定义了我们可以预期的每个集合的行为。但正如我们在本章的介绍中提到的,有几种方法可以实现每个接口。为什么框架不会为每个接口使用最佳实现?那肯定会让生活变得更简单 - 事实上,过于简单就像生活一样。如果实施对某些行动来说是灰狗,墨菲定律告诉我们这对其他人来说将是一只乌龟。由于没有任何接口的“最佳”实现,所以您必须进行权衡,判断应用程序中哪些操作最常使用,并选择优化这些操作的实现。
Expand Down Expand Up @@ -28,3 +31,5 @@
- 这些也按内容来组织它们的元素,但重要的区别是它们可以按排序顺序存储和检索它们。它们对于插入和删除元素,通过内容访问它们并迭代它们的操作相对较快。 树是
`TreeSet` 和 `TreeMap` 的支持结构。 在执行 `PriorityQueue` 和 `PriorityBlockingQueue` 时使用的优先堆是与树有关的结构。  

《《《 [下一节](03_Efficiency_and_the_O-Notation.md) <br/>
《《《 [返回首页](../README.md)
7 changes: 5 additions & 2 deletions ch11/03_Efficiency_and_the_O-Notation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](02_Implementations.md)

## 效率与Ο符号

在最后一节中,我们讨论了不同的实现对于不同的操作是“好的”。一个好的算法在使用两种资源时很经济:时间和空间。集合的实现通常使用与集合大小成正比的空间,但是访问和更新所需的时间可能会有很大差异,所以这将是我们的主要关心。很难说一个程序执行的速度有多快,因为这取决于很多因素,包括程序员省外的一些因素,比如编译代码的质量和硬件的速度。即使我们忽略了这些并且仅仅考虑算法的执行时间如何依赖于它的数据,详细的分析可能是复杂的。在 `Donald Knuth` 的经典着作“排序和搜索”(`Addison-Wesley`)中提供了一个相对简单的例子, `Knuth` 的名义 `MIX` 机器上的多列表插入排序程序的最坏情况执行时间推导为
Expand Down Expand Up @@ -29,5 +32,5 @@ O(2^N)的算法来解决 - 对于这些,当N加倍时,运行时间是平
下,我们计算操作的摊销成本 - 即执行 `n` 次的总成本除以 `n`,当 `n` 变得任意大时,将其取为极限。在向 `ArrayList` 添加元素的情况下,`N` 个元素的总成
本为 `O(N)`,因此摊余成本为 `O(1)`。



《《《 [下一节](04_contract.md) <br/>
《《《 [返回首页](../README.md)
10 changes: 5 additions & 5 deletions ch11/04_contract.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](03_Efficiency_and_the_O-Notation.md)

## 契约

在阅读软件设计时,你很可能会遇到合同一词,通常没有任何附带的解释。事实上,软件工程给这个术语的含义非常接近人们通常理解合同的含义。在日常使用中,合同定
Expand Down Expand Up @@ -29,8 +32,5 @@
定; 虽然合约具有约束力,但使用它们的主要优点之一是它们允许实现在更好的算法被发现时改变,或者随着硬件改进改变它们的相对优点。 当然,如果你正在使用另一
个实现,比如 `GNU Classpath`,那么不受合同约束的算法细节可能完全不同。






《《《 [下一节](05_Collections_and_Thread_Safety.md) <br/>
《《《 [返回首页](../README.md)
7 changes: 5 additions & 2 deletions ch11/05_Collections_and_Thread_Safety.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](04_contract.md)

## 集合和线程安全

当一个 `Java` 程序正在运行时,它正在执行一个或多个执行流或线程。 线程就像一个轻量级进程,所以同时执行多个线程的程序可以被认为是同时运行多个程序的计算
Expand Down Expand Up @@ -140,5 +143,5 @@

上述第三组也具有弱一致的迭代器。 在 `Java 6` 中,这包括 `DelayQueue` 和 `PriorityBlockingQueue`,它们在 `Java 5` 中具有快速迭代器。这意味着,除非这些队列是静态的,否则当不添加或插入元素时,您不能迭代这些队列的 `Java 5` 版本; 在其他时候,你必须使用 `toArray` 将它们的元素复制到一个数组中,然后遍历它。



《《《 [下一节](../ch12/00_The_Collection_Interface.md) <br/>
《《《 [返回首页](../README.md)
8 changes: 7 additions & 1 deletion ch12/00_The_Collection_Interface.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
《《《 [返回首页](../README.md) <br/>
《《《 [上一节](../ch11/05_Collections_and_Thread_Safety.md)

### 集合接口

接口集合(参见图 `12-1`)定义了我们期望的除地图以外的任何集合的核心功能。 它提供了四组中的方法。
Expand Down Expand Up @@ -101,4 +104,7 @@
for (int i=0; i<l.size(); i++) a[i] = l.get(i);
```

集合框架不包括将集合转换为基本类型数组的便利方法。 幸运的是,这只需要几行代码。
集合框架不包括将集合转换为基本类型数组的便利方法。 幸运的是,这只需要几行代码。

《《《 [下一节](01_Using_the_Methods_of_Collection.md) <br/>
《《《 [返回首页](../README.md)