From c97bde269ed4487535836641c3d6b49b727a2917 Mon Sep 17 00:00:00 2001 From: maskleo Date: Mon, 23 Apr 2018 20:59:49 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AC=AC=E4=B8=83?= =?UTF-8?q?=E7=AB=A0=E8=8F=9C=E5=8D=95=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++-- ch07/01_Generics_for_Reflection.md | 2 +- ch07/02_Reflected_Types_are_Reifiable_Types.md | 2 +- ch07/03_Reflection_for_Primitive_Types.md | 2 +- ch07/04_A_Generic_Reflection_Library.md | 2 +- ch07/05_Reflection_for_Generics.md | 2 +- ch07/06_Reflecting_Generic_Types.md | 2 +- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 16adcb79..778c6613 100644 --- a/README.md +++ b/README.md @@ -59,8 +59,15 @@ * [6.7 如何定义 ArrayList](ch06/07_How_to_Define_ArrayList.md) * [6.8 数组创建和可变参数](ch06/08_Array_Creation_and_Varargs.md) * [6.9 作为已弃用类型的阵列](ch06/09_Arrays_as_a_Deprecated_Type.md) - * [6.10 加起来](ch06/10_Summing_Up.md) -     + * [6.10 加起来](ch06/10_Summing_Up.md) + * [第七章(反射)](ch07/00_Reflection.md) + * [7.1 反射的泛型](ch07/01_Generics_for_Reflection.md) + * [7.2 反射类型是可维持类型](ch07/02_Reflected_Types_are_Reifiable_Types.md) + * [7.3 对原始类型的反思](ch07/03_Reflection_for_Primitive_Types.md) + * [7.4 一个通用的反射库](ch07/04_A_Generic_Reflection_Library.md) + * [7.5 泛型的反思](ch07/05_Reflection_for_Generics.md) + * [7.6 反思泛型类型](ch07/06_Reflecting_Generic_Types.md) + ## PR 提交 PR 前请先确认排版,示例: [中文文案排版](https://github.com/maskleo-doc/chinese-copywriting-guidelines) diff --git a/ch07/01_Generics_for_Reflection.md b/ch07/01_Generics_for_Reflection.md index 5da2ce21..97ec22bc 100644 --- a/ch07/01_Generics_for_Reflection.md +++ b/ch07/01_Generics_for_Reflection.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Reflection.md) -## 反射的泛型 +### 反射的泛型 `Java` 支持自 `1.0` 版以来的反射以及 `1.1` 版以后的类文字。 它们的核心是 `Class` 类,它表示运行时对象类型的信息。 您可以编写一个类型,后跟 `.class` 作为文字,表示与该类型相对应的类标记,并且方法 `getClass` 在每个对象上定义并返回一个类标记,该标记表示该对象在运行时携带的特定类型信息。这里是一个例子: diff --git a/ch07/02_Reflected_Types_are_Reifiable_Types.md b/ch07/02_Reflected_Types_are_Reifiable_Types.md index a971c7e3..61cca305 100644 --- a/ch07/02_Reflected_Types_are_Reifiable_Types.md +++ b/ch07/02_Reflected_Types_are_Reifiable_Types.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Generics_for_Reflection.md) -## 反射类型是可维持类型 +### 反射类型是可维持类型 反思使程序可以使用物化类型信息。 因此,必要的是,每个类别标记对应于可确定类型。 如果您尝试反映参数化类型,则会获得相应原始类型的指定信息: diff --git a/ch07/03_Reflection_for_Primitive_Types.md b/ch07/03_Reflection_for_Primitive_Types.md index 3b6f3460..3cfa0c00 100644 --- a/ch07/03_Reflection_for_Primitive_Types.md +++ b/ch07/03_Reflection_for_Primitive_Types.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Reflected_Types_are_Reifiable_Types.md) -## 对原始类型的反思 +### 对原始类型的反思 `Java` 中的每种类型(包括基元类型和数组类型)都具有类文字和相应的类标记。 diff --git a/ch07/04_A_Generic_Reflection_Library.md b/ch07/04_A_Generic_Reflection_Library.md index 5b08fb2c..a602e302 100644 --- a/ch07/04_A_Generic_Reflection_Library.md +++ b/ch07/04_A_Generic_Reflection_Library.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_Reflection_for_Primitive_Types.md) -## 一个通用的反射库 +### 一个通用的反射库 正如我们所看到的,粗心使用未经检查的演员阵容可能会导致问题,例如违反广告中的真相原则或不雅暴露原则(参见第 `6.5` 节和第 `6.6` 节)。 最小化使用未经检查的强制转换的一种技术是将它们封装在库中。 该库可以仔细检查以确保其使用未经检查的强制转换是安全的,而调用该库的代码可以没有未经检查的强制转换。 `Sun` 正在考虑添加类似于这里描述的库方法。 diff --git a/ch07/05_Reflection_for_Generics.md b/ch07/05_Reflection_for_Generics.md index 1e88e123..650e5ddb 100644 --- a/ch07/05_Reflection_for_Generics.md +++ b/ch07/05_Reflection_for_Generics.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](04_A_Generic_Reflection_Library.md) -## 泛型的反思 +### 泛型的反思 泛型以两种方式改变反射库。 我们已经讨论了反射的泛型,其中 `Java` 为类 `Class` 添加了一个类型参数。 我们现在讨论泛型的反射,其中 `Java` 添加了支 持访问泛型类型的方法和类。 diff --git a/ch07/06_Reflecting_Generic_Types.md b/ch07/06_Reflecting_Generic_Types.md index 027657a3..37f3b62d 100644 --- a/ch07/06_Reflecting_Generic_Types.md +++ b/ch07/06_Reflecting_Generic_Types.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](05_Reflection_for_Generics.md) -## 反映泛型类型 +### 反思泛型类型 反射库提供了一个 `Type` 接口来描述一个通用类型。 有一个类实现了这个接口和四个其他接口来扩展它,对应于五种不同的类型: From a146243385ac307db909a8371c30fe64e61845a8 Mon Sep 17 00:00:00 2001 From: maskleo Date: Mon, 23 Apr 2018 21:06:44 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AC=AC=E5=85=AB?= =?UTF-8?q?=E7=AB=A0=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ ch08/01_Take_Care_when_Callin_Legacy_Code.md | 2 +- ch08/02_Use_Checked_Collections_to_Enforce_Security.md | 2 +- ch08/03_Specialize_to_Create_Reifiable_Types.md | 2 +- ch08/04_Maintain_Binary_Compatibility.md | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 778c6613..c32980f1 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,11 @@ * [7.4 一个通用的反射库](ch07/04_A_Generic_Reflection_Library.md) * [7.5 泛型的反思](ch07/05_Reflection_for_Generics.md) * [7.6 反思泛型类型](ch07/06_Reflecting_Generic_Types.md) + * [第八章(有效的泛型)](ch08/00_Effective_Generics.md) + * [8.1 调用遗留代码时要小心](ch08/01_Take_Care_when_Callin_Legacy_Code.md) + * [8.2 使用选中的集合来强化安全性](ch08/02_Use_Checked_Collections_to_Enforce_Security.md) + * [8.3 专注于创建可维持类型](ch08/03_Specialize_to_Create_Reifiable_Types.md) + * [8.4 保持二进制兼容性](ch08/04_Maintain_Binary_Compatibility.md) ## PR 提交 PR 前请先确认排版,示例: [中文文案排版](https://github.com/maskleo-doc/chinese-copywriting-guidelines) diff --git a/ch08/01_Take_Care_when_Callin_Legacy_Code.md b/ch08/01_Take_Care_when_Callin_Legacy_Code.md index 7adbbcef..a478e161 100644 --- a/ch08/01_Take_Care_when_Callin_Legacy_Code.md +++ b/ch08/01_Take_Care_when_Callin_Legacy_Code.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Effective_Generics.md) -## 调用遗留代码时要小心 +### 调用遗留代码时要小心 正如我们所看到的,泛型类型在编译时被检查,而不是运行时。 通常,这正是我们想要的,因为在编译时检查会更早地报告错误,并且不会导致运行时开销。 但是,有时这可能不合适,因为我们无法确定编译时检查是否足够(比如说,因为我们将参数化类型的实例传递给旧客户端或我们不信任的客户端 ),还是因为我们在运行时需要关于类型的信息(比如说,因为我们需要一个可重用类型作为数组组件)。 一个托收集合通常会诀窍,如果不行,我们可以创建一个专门的类。 我们考虑本节中的已检查集合,下一节中的安全问题以及之后的部分中的专门类。 diff --git a/ch08/02_Use_Checked_Collections_to_Enforce_Security.md b/ch08/02_Use_Checked_Collections_to_Enforce_Security.md index 81475903..e4761dd2 100644 --- a/ch08/02_Use_Checked_Collections_to_Enforce_Security.md +++ b/ch08/02_Use_Checked_Collections_to_Enforce_Security.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Take_Care_when_Callin_Legacy_Code.md) -## 使用选中的集合来强化安全性 +### 使用选中的集合来强化安全性 请注意,通用类型提供的保证仅适用于没有未经检查的警告的情况。 这意味着泛型类型对于确保其他人编写的代码的安全性没有用处,因为您无法知道该代码是否在编译时引发未经检查的警告。 diff --git a/ch08/03_Specialize_to_Create_Reifiable_Types.md b/ch08/03_Specialize_to_Create_Reifiable_Types.md index c4bcb228..7e65ddcb 100644 --- a/ch08/03_Specialize_to_Create_Reifiable_Types.md +++ b/ch08/03_Specialize_to_Create_Reifiable_Types.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Use_Checked_Collections_to_Enforce_Security.md) -## 专注于创建可维持类型 +### 专注于创建可维持类型 参数化类型不可确定,但某些操作(如实例测试,转换和数组创建仅适用于可重用类型)。 在这种情况下,一种解决方法是创建参数化类型的专用版本。 专业版本可以通过委托(即包装)或继承(即子类化)来创建,我们依次讨论每个版本。 diff --git a/ch08/04_Maintain_Binary_Compatibility.md b/ch08/04_Maintain_Binary_Compatibility.md index e77e62fa..963ac446 100644 --- a/ch08/04_Maintain_Binary_Compatibility.md +++ b/ch08/04_Maintain_Binary_Compatibility.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_Specialize_to_Create_Reifiable_Types.md) -## 保持二进制兼容性 +### 保持二进制兼容性 正如我们强调的那样,泛型是通过擦除来实现的,以缓解进化。当将遗留代码转化为泛型代码时,我们希望确保新生代码能够与任何现有代码一起工作,包括我们没有源代码的类文件。当这种情况发生时,我们说传统和通用版本是二进制兼容的。 From 3c694dc7e46f0638a7aa1caa13eeeda3011667f9 Mon Sep 17 00:00:00 2001 From: maskleo Date: Mon, 23 Apr 2018 21:12:47 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AC=AC=E4=B9=9D?= =?UTF-8?q?=E7=AB=A0=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++++++- ch09/01_Visitor.md | 2 +- ch09/02_Interpreter.md | 2 +- ch09/03_Function.md | 2 +- ch09/04_Strategy.md | 2 +- ch09/05_Subject-Observer.md | 2 +- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c32980f1..7c37e356 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,16 @@ * [8.2 使用选中的集合来强化安全性](ch08/02_Use_Checked_Collections_to_Enforce_Security.md) * [8.3 专注于创建可维持类型](ch08/03_Specialize_to_Create_Reifiable_Types.md) * [8.4 保持二进制兼容性](ch08/04_Maintain_Binary_Compatibility.md) + * [第九章(设计模式)](ch09/00_Design_Patterns.md) + * [9.1 游客](ch09/01_Visitor.md) + * [9.2 翻译员](ch09/02_Interpreter.md) + * [9.3 功能](ch09/03_Function.md) + * [9.4 策略](ch09/04_Strategy.md) + * [9.5 主题观察者](ch09/05_Subject-Observer.md) + + + + ## PR 提交 PR 前请先确认排版,示例: [中文文案排版](https://github.com/maskleo-doc/chinese-copywriting-guidelines) @@ -79,4 +89,4 @@ ## 高清英文版 PDF[下载](https://github.com/maskleo/Java-Generics-and-Collections/files/1634266/Java.pdf) ## LICENSE -![](LICENSE.png) +![](LICENSE.png) \ No newline at end of file diff --git a/ch09/01_Visitor.md b/ch09/01_Visitor.md index 7a6adbf9..ec2a028f 100644 --- a/ch09/01_Visitor.md +++ b/ch09/01_Visitor.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Design_Patterns.md) -## 游客 +### 游客 通常情况下,数据结构由案例分析和递归定义。例如,`Tree` 类型的二叉树是以下之一: diff --git a/ch09/02_Interpreter.md b/ch09/02_Interpreter.md index 8c916ba7..0ea7b867 100644 --- a/ch09/02_Interpreter.md +++ b/ch09/02_Interpreter.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Visitor.md) -## 翻译员 +### 翻译员 树的一种用法是用编程语言表示表达式。如前一节所述,表达式类型由一个抽象类表示,每种表达式都由一个子类表示。有一种抽象方法来评估一个表达式,并且每个子类都根据相应的表达式实现该方法。 diff --git a/ch09/03_Function.md b/ch09/03_Function.md index ba2f3b92..61cec220 100644 --- a/ch09/03_Function.md +++ b/ch09/03_Function.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Interpreter.md) -## 功能 +### 功能 函数模式将任意方法转换为对象。函数和相应方法之间的关系类似于 `Comparator` 和 `compareTo` 方法之间的关系。 diff --git a/ch09/04_Strategy.md b/ch09/04_Strategy.md index eef4d601..8195585c 100644 --- a/ch09/04_Strategy.md +++ b/ch09/04_Strategy.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_Function.md) -## 策略 +### 策略 策略模式用于将方法与对象分离,使您可以提供许多可能的方法实例。我们对战略模式的讨论说明了许多面向对象程序中的结构化技术,即并行类层次结构。我们将通过考虑纳税人如何应用不同的税收策略来说明战略模式。纳税人将会有一个等级制度,并且有一个相关的税收策略等级制度。例如,有一个适用于任何纳税人的默认策略。纳税人的一个子类是信任,而默认策略的一个子类只适用于信任。 diff --git a/ch09/05_Subject-Observer.md b/ch09/05_Subject-Observer.md index e499bea8..a839d4fd 100644 --- a/ch09/05_Subject-Observer.md +++ b/ch09/05_Subject-Observer.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](04_Strategy.md) -## 主题观察者 +### 主题观察者 我们用一个更加扩展的例子来完成,说明通用的 `Subject-Observer` 模式。与策略模式一样,`Subject-Observer` 模式使用并行类层次结构,但这次我们需要两个具有相互递归边界的类型变量,一个代表特定类型的主体,一个代表特定类型的观察者。这是我们的第一个带有相互递归边界的类型变量的例子。 From 7e5cee6a6e186497f87f2bf6dee043c819e3f0ee Mon Sep 17 00:00:00 2001 From: maskleo Date: Tue, 24 Apr 2018 09:35:03 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 78 +++++++++++++++--------------- ch06/07_How_to_Define_ArrayList.md | 2 +- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 7c37e356..2c27431c 100644 --- a/README.md +++ b/README.md @@ -28,44 +28,44 @@ * [2.5 数组](hc02/05_Arrays.md#数组) * [2.6 通配符与类型参数](ch02/06_Wildcards_Versus_Type_Parameters.md#通配符与类型参数) * [2.7 通配符捕获](ch02/07_Wildcard_Capture.md#通配符捕获) - * [2.8 对通配符的限制](ch02/08_Restrictions_on_Wildcards.md) - * [第三章(集合类)](ch03/00_Comparison_and_Bounds.md) - * [3.1 可比较的](ch03/01_Comparable.md) - * [3.2 集合的最大值](ch03/02_Maximum_of_a_Collection.md) - * [3.3 水果相关示例](ch03/03_A_Fruity_Example.md) - * [3.4 比较](ch03/04_Comparator.md) - * [3.5 枚举类型](ch03/05_Enumerated_Types.md) - * [3.6 多重界限](ch03/06_Multiple_Bounds.md) - * [3.7 桥梁](ch03/07_Bridges.md) - * [3.8 协变覆盖](ch03/08_Covariant_Overriding.md) - * [第四章(声明)](ch04/00_Declarations.md) - * [4.1 构造函数](ch04/01_Constructors.md) - * [4.2 静态成员](ch04/02_Static_Members.md) - * [4.3 嵌套类](ch04/03_Nested_Classes.md) - * [4.4 擦除的工作原理](ch04/04_How_Erasure_Works.md) - * [第五章(进化,而不是革命)](ch05/00_Evolution_Not_Revolution.md) - * [5.1 旧版客户端的旧版库](ch05/01_Legacy_Library_with_Legacy_Client.md) - * [5.2 具有通用客户端的通用库](ch05/02_Generic_Library_with_Generic_Client.md) - * [5.3 具有传统客户端的通用库](ch05/03_Generic_Library_with_Legacy_Client.md) - * [5.4 具有通用客户端的旧版库](ch05/04_Legacy_Library_with_Generic_Client.md) - * [5.5 结论](ch05/05_Conclusions.md) - * [第六章(具体化)](ch06/00_Reification.md) - * [6.1 可定义类型](ch06/01_Reifiable_Types.md) - * [6.2 实例测试和示例](ch06/02_Instance_Tests_and_Casts.md) - * [6.3 异常处理](ch06/03_Exception_Handling.md) - * [6.4 数组创建](ch06/04_Array_Creation.md) - * [6.5 广告中的真理原则](ch06/05_The_Principle_of_Truth_in_Advertising.md) - * [6.6 不雅暴露的原则](ch06/06_The_Principle_of_Indecent_Exposure.md) - * [6.7 如何定义 ArrayList](ch06/07_How_to_Define_ArrayList.md) - * [6.8 数组创建和可变参数](ch06/08_Array_Creation_and_Varargs.md) - * [6.9 作为已弃用类型的阵列](ch06/09_Arrays_as_a_Deprecated_Type.md) - * [6.10 加起来](ch06/10_Summing_Up.md) - * [第七章(反射)](ch07/00_Reflection.md) - * [7.1 反射的泛型](ch07/01_Generics_for_Reflection.md) - * [7.2 反射类型是可维持类型](ch07/02_Reflected_Types_are_Reifiable_Types.md) - * [7.3 对原始类型的反思](ch07/03_Reflection_for_Primitive_Types.md) - * [7.4 一个通用的反射库](ch07/04_A_Generic_Reflection_Library.md) - * [7.5 泛型的反思](ch07/05_Reflection_for_Generics.md) + * [2.8 对通配符的限制](ch02/08_Restrictions_on_Wildcards.md#对通配符的限制) + * [第三章(集合类)](ch03/00_Comparison_and_Bounds.md#集合类) + * [3.1 可比较的](ch03/01_Comparable.md#可比较的) + * [3.2 集合的最大值](ch03/02_Maximum_of_a_Collection.md#集合的最大值) + * [3.3 水果相关示例](ch03/03_A_Fruity_Example.md#水果相关示例) + * [3.4 比较](ch03/04_Comparator.md#比较) + * [3.5 枚举类型](ch03/05_Enumerated_Types.md#枚举类型) + * [3.6 多重界限](ch03/06_Multiple_Bounds.md#多重界限) + * [3.7 桥梁](ch03/07_Bridges.md#桥梁) + * [3.8 协变覆盖](ch03/08_Covariant_Overriding.md#协变覆盖) + * [第四章(声明)](ch04/00_Declarations.md#声明) + * [4.1 构造函数](ch04/01_Constructors.md#构造函数) + * [4.2 静态成员](ch04/02_Static_Members.md#静态成员) + * [4.3 嵌套类](ch04/03_Nested_Classes.md#嵌套类) + * [4.4 擦除的工作原理](ch04/04_How_Erasure_Works.md#擦除的工作原理) + * [第五章(进化,而不是革命)](ch05/00_Evolution_Not_Revolution.md#进化,而不是革命) + * [5.1 旧版客户端的旧版库](ch05/01_Legacy_Library_with_Legacy_Client.md#旧版客户端的旧版库) + * [5.2 具有通用客户端的通用库](ch05/02_Generic_Library_with_Generic_Client.md#具有通用客户端的通用库) + * [5.3 具有传统客户端的通用库](ch05/03_Generic_Library_with_Legacy_Client.md#具有传统客户端的通用库) + * [5.4 具有通用客户端的旧版库](ch05/04_Legacy_Library_with_Generic_Client.md#具有通用客户端的旧版库) + * [5.5 结论](ch05/05_Conclusions.md#结论) + * [第六章(具体化)](ch06/00_Reification.md#具体化) + * [6.1 可定义类型](ch06/01_Reifiable_Types.md#可定义类型) + * [6.2 实例测试和示例](ch06/02_Instance_Tests_and_Casts.md#实例测试和示例) + * [6.3 异常处理](ch06/03_Exception_Handling.md#异常处理) + * [6.4 数组创建](ch06/04_Array_Creation.md#数组创建) + * [6.5 广告中的真理原则](ch06/05_The_Principle_of_Truth_in_Advertising.md#广告中的真理原则) + * [6.6 不雅暴露的原则](ch06/06_The_Principle_of_Indecent_Exposure.md#不雅暴露的原则) + * [6.7 如何定义ArrayList](ch06/07_How_to_Define_ArrayList.md#如何定义ArrayList) + * [6.8 数组创建和可变参数](ch06/08_Array_Creation_and_Varargs.md#数组创建和可变参数) + * [6.9 作为已弃用类型的阵列](ch06/09_Arrays_as_a_Deprecated_Type.md#作为已弃用类型的阵列) + * [6.10 加起来](ch06/10_Summing_Up.md#加起来) + * [第七章(反射)](ch07/00_Reflection.md#反射) + * [7.1 反射的泛型](ch07/01_Generics_for_Reflection.md#反射的泛型) + * [7.2 反射类型是可维持类型](ch07/02_Reflected_Types_are_Reifiable_Types.md#反射类型是可维持类型) + * [7.3 对原始类型的反思](ch07/03_Reflection_for_Primitive_Types.md#对原始类型的反思) + * [7.4 一个通用的反射库](ch07/04_A_Generic_Reflection_Library.md#一个通用的反射库) + * [7.5 泛型的反思](ch07/05_Reflection_for_Generics.md#泛型的反思) * [7.6 反思泛型类型](ch07/06_Reflecting_Generic_Types.md) * [第八章(有效的泛型)](ch08/00_Effective_Generics.md) * [8.1 调用遗留代码时要小心](ch08/01_Take_Care_when_Callin_Legacy_Code.md) @@ -81,7 +81,7 @@ - + ## PR 提交 PR 前请先确认排版,示例: [中文文案排版](https://github.com/maskleo-doc/chinese-copywriting-guidelines) diff --git a/ch06/07_How_to_Define_ArrayList.md b/ch06/07_How_to_Define_ArrayList.md index 3c07cd26..bd9749bd 100644 --- a/ch06/07_How_to_Define_ArrayList.md +++ b/ch06/07_How_to_Define_ArrayList.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](06_The_Principle_of_Indecent_Exposure.md) -### 如何定义 ArrayList +### 如何定义ArrayList 我们在其他地方争辩说,通常最好使用列表而不是使用数组。有一些地方这不合适。在极少数情况下,出于效率或兼容性的原因,您将需要使用数组。另外,当然,你需要使 用数组来实现 `ArrayList` 本身。在这里,我们将 `ArrayList` 的实现作为一种模型,在极少情况下需要使用数组。这些实现需要谨慎编写,因为它们必然涉及使用未经 From caaac501b45849131412d42b876cb5ff50ee0649 Mon Sep 17 00:00:00 2001 From: maskleo Date: Tue, 24 Apr 2018 11:25:46 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2c27431c..9c7e3f93 100644 --- a/README.md +++ b/README.md @@ -66,18 +66,18 @@ * [7.3 对原始类型的反思](ch07/03_Reflection_for_Primitive_Types.md#对原始类型的反思) * [7.4 一个通用的反射库](ch07/04_A_Generic_Reflection_Library.md#一个通用的反射库) * [7.5 泛型的反思](ch07/05_Reflection_for_Generics.md#泛型的反思) - * [7.6 反思泛型类型](ch07/06_Reflecting_Generic_Types.md) - * [第八章(有效的泛型)](ch08/00_Effective_Generics.md) - * [8.1 调用遗留代码时要小心](ch08/01_Take_Care_when_Callin_Legacy_Code.md) - * [8.2 使用选中的集合来强化安全性](ch08/02_Use_Checked_Collections_to_Enforce_Security.md) - * [8.3 专注于创建可维持类型](ch08/03_Specialize_to_Create_Reifiable_Types.md) - * [8.4 保持二进制兼容性](ch08/04_Maintain_Binary_Compatibility.md) - * [第九章(设计模式)](ch09/00_Design_Patterns.md) - * [9.1 游客](ch09/01_Visitor.md) - * [9.2 翻译员](ch09/02_Interpreter.md) - * [9.3 功能](ch09/03_Function.md) - * [9.4 策略](ch09/04_Strategy.md) - * [9.5 主题观察者](ch09/05_Subject-Observer.md) + * [7.6 反思泛型类型](ch07/06_Reflecting_Generic_Types.md#反思泛型类型) + * [第八章(有效的泛型)](ch08/00_Effective_Generics.md#有效的泛型) + * [8.1 调用遗留代码时要小心](ch08/01_Take_Care_when_Callin_Legacy_Code.md#调用遗留代码时要小心) + * [8.2 使用选中的集合来强化安全性](ch08/02_Use_Checked_Collections_to_Enforce_Security.md#使用选中的集合来强化安全性) + * [8.3 专注于创建可维持类型](ch08/03_Specialize_to_Create_Reifiable_Types.md#专注于创建可维持类型) + * [8.4 保持二进制兼容性](ch08/04_Maintain_Binary_Compatibility.md#保持二进制兼容性) + * [第九章(设计模式)](ch09/00_Design_Patterns.md#设计模式) + * [9.1 游客](ch09/01_Visitor.md#游客) + * [9.2 翻译员](ch09/02_Interpreter.md#翻译员) + * [9.3 功能](ch09/03_Function.md#功能) + * [9.4 策略](ch09/04_Strategy.md#策略) + * [9.5 主题观察者](ch09/05_Subject-Observer.md#主题观察者) From 609ea792b35028d764bd974abccc4a2cde9c18e4 Mon Sep 17 00:00:00 2001 From: maskleo Date: Tue, 24 Apr 2018 22:39:28 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 42 +++++++++++++++++++--- ch10/01_The_Main_Interfaces_of_the_Java.md | 2 +- ch11/01_Iterable_and_Iterators.md | 2 +- ch11/02_Implementations.md | 2 +- ch11/03_Efficiency_and_the_O-Notation.md | 2 +- ch11/04_contract.md | 2 +- ch11/05_Collections_and_Thread_Safety.md | 2 +- ch12/00_The_Collection_Interface.md | 2 +- ch13/00_Sets.md | 2 +- ch14/03_BlockingQueue.md | 2 +- ch14/04_Deque.md | 2 +- ch14/05_Comparing_Queue_Implementations.md | 2 +- ch15/01_Using_the_Methods_of_List.md | 2 +- ch15/02_Implementing_List.md | 2 +- ch15/03_Comparing_List_Implementations.md | 2 +- ch16/01_Using_the_Methods_of_Map.md | 2 +- ch16/02_Implementing_Map.md | 2 +- ch16/03_SortedMap_and_NavigableMap.md | 2 +- ch16/04_ConcurrentMap.md | 2 +- ch16/05_ConcurrentNavigableMap.md | 2 +- ch16/06_Comparing_Map_Implementations.md | 2 +- ch17/01_Generic_Algorithms.md | 2 +- ch17/02_Collection_Factories.md | 2 +- ch17/03_Wrappers.md | 2 +- ch17/04_Other_Methods.md | 2 +- 25 files changed, 62 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 9c7e3f93..0c142e56 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ 将利用碎片时间进行整理和校对,完整的时间段适合做其他需要大量思考的事,如果你有兴趣欢迎提交PR。 ## TODO -- 目录完善 - 数据校对 ## 目录 @@ -78,9 +77,44 @@ * [9.3 功能](ch09/03_Function.md#功能) * [9.4 策略](ch09/04_Strategy.md#策略) * [9.5 主题观察者](ch09/05_Subject-Observer.md#主题观察者) - - - +* [第二部分:集合](ch10/00_Collections.md#集合) + * [第十章(集合)](ch10/00_Collections.md#集合) + * [10.1 Java集合框架的主要接口](ch10/01_The_Main_Interfaces_of_the_Java.md#Java集合框架的主要接口) + * [第十一章(初步措施)](ch11/00_Preliminaries.md#初步措施) + * [11.1 可迭代和迭代器](ch11/01_Iterable_and_Iterators.md) + * [11.2 实现](ch11/02_Implementations.md) + * [11.3 效率与Ο符号](ch11/03_Efficiency_and_the_O-Notation.md#效率与Ο符号) + * [11.4 契约](ch11/04_contract.md#契约) + * [11.5 集合和线程安全](ch11/05_Collections_and_Thread_Safety.md#集合和线程安全) + * [第十二章(集合接口)](ch12/00_The_Collection_Interface.md#集合接口) + * [12.1 使用集合方法](ch12/01_Using_the_Methods_of_Collection.md#使用集合方法) + * [12.2 集合实现](ch12/02_Implementing_Collection.md#集合实现) + * [12.3 集合构造函数](ch12/03_Collection_Constructors.md#集合构造函数) + * [第十三章(Sets)](ch13/00_Sets.md#Sets) + * [13.1 实现Set](ch13/01_Implementing_Set.md#实现Set) + * [13.2 SortedSet和NavigableSet](ch13/02_SortedSet_and_NavigableSet.md#SortedSet和NavigableSet) + * [第十四章(Queues)](ch14/00_Queues.md#Queues) + * [14.1 使用队列方法](ch14/01_Using_the_Methods_of_Queue.md#使用队列方法) + * [14.2 队列的实现](ch14/02_Implementing_Queue.md#队列的实现) + * [14.3 BlockingQueue](ch14/03_BlockingQueue.md#BlockingQueue) + * [14.4 Deque](ch14/04_Deque.md#Deque) + * [14.5 比较队列实现](ch14/05_Comparing_Queue_Implementations.md#比较队列实现) + * [第十五章(Lists)](ch15/00_Lists.md#Lists) + * [15.1 使用List的方法](ch15/01_Using_the_Methods_of_List.md#使用List的方法) + * [15.2 实现List](ch15/02_Implementing_List.md#实现List) + * [15.3 比较List实现](ch15/03_Comparing_List_Implementations.md#比较List实现) + * [第十六章(Maps)](ch16/00_Maps.md#Maps) + * [16.1 使用Map的方法](ch16/01_Using_the_Methods_of_Map.md#使用Map的方法) + * [16.2 实现Map](ch16/02_Implementing_Map.md#实现Map) + * [16.3 SortedMap和NavigableMap](ch16/03_SortedMap_and_NavigableMap.md#SortedMap和NavigableMap) + * [16.4 ConcurrentMap](ch16/04_ConcurrentMap.md#ConcurrentMap) + * [16.5 ConcurrentNavigableMap](ch16/05_ConcurrentNavigableMap.md#ConcurrentNavigableMap) + * [16.6 比较Map的实现](ch16/06_Comparing_Map_Implementations.md#比较Map的实现) + * [第十七章(集合类)](ch17/00_The_Collections_Class.md#集合类) + * [17.1 通用算法](ch17/01_Generic_Algorithms.md#通用算法) + * [17.2 收集工厂](ch17/02_Collection_Factories.md#收集工厂) + * [17.3 包装](ch17/03_Wrappers.md#包装) + * [17.4 其他方法](ch17/04_Other_Methods.md#其他方法) ## PR diff --git a/ch10/01_The_Main_Interfaces_of_the_Java.md b/ch10/01_The_Main_Interfaces_of_the_Java.md index e4280d7b..a0953f56 100644 --- a/ch10/01_The_Main_Interfaces_of_the_Java.md +++ b/ch10/01_The_Main_Interfaces_of_the_Java.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Collections.md) -## Java集合框架的主要接口 +### Java集合框架的主要接口 图 `10-1` 显示了 `Java` 集合框架的主要接口,以及另外一个 `Iterable`--它不在框架中,但是它是一个重要的附件。其目的如下: diff --git a/ch11/01_Iterable_and_Iterators.md b/ch11/01_Iterable_and_Iterators.md index 4a50ef20..d2495a0b 100644 --- a/ch11/01_Iterable_and_Iterators.md +++ b/ch11/01_Iterable_and_Iterators.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Preliminaries.md) -## 可迭代和迭代器 +### 可迭代和迭代器 迭代器是实现接口迭代器的对象 diff --git a/ch11/02_Implementations.md b/ch11/02_Implementations.md index d9c63b55..fa39c2bd 100644 --- a/ch11/02_Implementations.md +++ b/ch11/02_Implementations.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Iterable_and_Iterators.md) -## 实现 +### 实现 我们简要地看了一下集合框架的接口,这些接口定义了我们可以预期的每个集合的行为。但正如我们在本章的介绍中提到的,有几种方法可以实现每个接口。为什么框架不会为每个接口使用最佳实现?那肯定会让生活变得更简单 - 事实上,过于简单就像生活一样。如果实施对某些行动来说是灰狗,墨菲定律告诉我们这对其他人来说将是一只乌龟。由于没有任何接口的“最佳”实现,所以您必须进行权衡,判断应用程序中哪些操作最常使用,并选择优化这些操作的实现。 diff --git a/ch11/03_Efficiency_and_the_O-Notation.md b/ch11/03_Efficiency_and_the_O-Notation.md index 2532eccd..ffa08c57 100644 --- a/ch11/03_Efficiency_and_the_O-Notation.md +++ b/ch11/03_Efficiency_and_the_O-Notation.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Implementations.md) -## 效率与Ο符号 +### 效率与Ο符号 在最后一节中,我们讨论了不同的实现对于不同的操作是“好的”。一个好的算法在使用两种资源时很经济:时间和空间。集合的实现通常使用与集合大小成正比的空间,但是访问和更新所需的时间可能会有很大差异,所以这将是我们的主要关心。很难说一个程序执行的速度有多快,因为这取决于很多因素,包括程序员省外的一些因素,比如编译代码的质量和硬件的速度。即使我们忽略了这些并且仅仅考虑算法的执行时间如何依赖于它的数据,详细的分析可能是复杂的。在 `Donald Knuth` 的经典着作“排序和搜索”(`Addison-Wesley`)中提供了一个相对简单的例子, `Knuth` 的名义 `MIX` 机器上的多列表插入排序程序的最坏情况执行时间推导为 diff --git a/ch11/04_contract.md b/ch11/04_contract.md index c2fcd1e4..946c498f 100644 --- a/ch11/04_contract.md +++ b/ch11/04_contract.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_Efficiency_and_the_O-Notation.md) -## 契约 +### 契约 在阅读软件设计时,你很可能会遇到合同一词,通常没有任何附带的解释。事实上,软件工程给这个术语的含义非常接近人们通常理解合同的含义。在日常使用中,合同定 义了双方可以期望的彼此之间 - 在某些交易中彼此承担的义务。如果合同规定了供应商向客户提供的服务,供应商的义务是显而易见的。但客户也可能有义务 - 除了支付 diff --git a/ch11/05_Collections_and_Thread_Safety.md b/ch11/05_Collections_and_Thread_Safety.md index 0e8051d1..53ab5684 100644 --- a/ch11/05_Collections_and_Thread_Safety.md +++ b/ch11/05_Collections_and_Thread_Safety.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](04_contract.md) -## 集合和线程安全 +### 集合和线程安全 当一个 `Java` 程序正在运行时,它正在执行一个或多个执行流或线程。 线程就像一个轻量级进程,所以同时执行多个线程的程序可以被认为是同时运行多个程序的计算 机,但是有一个重要区别:不同的线程可以同时访问相同的内存位置和其他系统资源。 在具有多个处理器的机器上,可以通过为每个线程分配处理器来实现真正的并发线 diff --git a/ch12/00_The_Collection_Interface.md b/ch12/00_The_Collection_Interface.md index 203e9cef..a4764f0c 100644 --- a/ch12/00_The_Collection_Interface.md +++ b/ch12/00_The_Collection_Interface.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](../ch11/05_Collections_and_Thread_Safety.md) -### 集合接口 +## 集合接口 接口集合(参见图 `12-1`)定义了我们期望的除地图以外的任何集合的核心功能。 它提供了四组中的方法。 diff --git a/ch13/00_Sets.md b/ch13/00_Sets.md index e8124978..4bf8f768 100644 --- a/ch13/00_Sets.md +++ b/ch13/00_Sets.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](../ch12/03_Collection_Constructors.md) -### Sets +## Sets 一个集合是不能包含重复项目的集合; 如果它已经存在于集合中,则添加它不起作用。`Set` 接口的方法与 `Collection` 的方法相同,但它是分开定义的,以允许以这种方式更改 `add`(和 `addAll`,这是用 `add` 定义的)合约。 回到上一章中的任务管理器示例,假设星期一您有空闲时间执行电话任务。 您可以通过将所有电话任务添加到星期一任务来进行相应的收集。 让 `mondayTasks` 和 `phone` 任务如例 `12-1` 中所声明的那样。 使用一个集合(再次选择一个方便常见的 `Set` 实现),你可以写: diff --git a/ch14/03_BlockingQueue.md b/ch14/03_BlockingQueue.md index b476ef30..b48791ab 100644 --- a/ch14/03_BlockingQueue.md +++ b/ch14/03_BlockingQueue.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Implementing_Queue.md) -## BlockingQueue +### BlockingQueue `Java 5` 为集合框架添加了许多类以供并发应用程序使用。其中大部分是 `Queue` 子接口 `BlockingQueue`(见图 `14-5`)的实现,主要用于生产者消费者队列。 diff --git a/ch14/04_Deque.md b/ch14/04_Deque.md index 561decea..7d902e64 100644 --- a/ch14/04_Deque.md +++ b/ch14/04_Deque.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_BlockingQueue.md) -## Deque +### Deque `deque`(发音为“deck”)是一个双端队列。与只能在尾部插入元素并仅在头部进行检查或删除的队列不同,`deque` 可以接受用于插入的元素并将其呈现在任一端进行检查或删除。与 `Queue` 不同的是,`Deque` 的合约指定了它在呈现元素时使用的顺序:它是一种线性结构,其中在尾部添加的元素在头部以相同的顺序排列。用作队列,那么 `Deque` 总是一个 `FIFO` 结构;合同不允许优先考虑。如果从添加元素的同一端(头部或尾部)删除元素,则 `Deque` 将用作堆栈或 `LIFO`(后进先出)结构。 diff --git a/ch14/05_Comparing_Queue_Implementations.md b/ch14/05_Comparing_Queue_Implementations.md index 1af48b05..08b0b8cd 100644 --- a/ch14/05_Comparing_Queue_Implementations.md +++ b/ch14/05_Comparing_Queue_Implementations.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](04_Deque.md) -## 比较队列实现 +### 比较队列实现 表 `14-1` 显示了我们讨论的 `Deque` 和 `Queue` 实现的一些示例操作的顺序性能,不考虑锁定和 `CAS` 开销。这些结果对于理解您选择的实现的行为而言应该很有意思,但正如我们在本章开头提到的那样,它们不可能是决定性因素。 您的选择更可能取决于应用程序的功能和并发性要求。 diff --git a/ch15/01_Using_the_Methods_of_List.md b/ch15/01_Using_the_Methods_of_List.md index 1c41f38d..10447796 100644 --- a/ch15/01_Using_the_Methods_of_List.md +++ b/ch15/01_Using_the_Methods_of_List.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Lists.md) -## 使用List的方法 +### 使用List的方法 让我们看看在待办事项管理器中使用其中一些方法的例子。 在上一章中,我们考虑使用关闭功能在一个基于队列的类中组织一天的任务。 扩大应用范围的一个有用的方法是拥有许多这种类型的对象,每个对象代表未来一天计划的任务。 我们将在一个 `List` 中存储对这些对象的引用,以便将它表示的将来的天数编入索引(保持简单并避免处理 `java.util.Calendar` 的令人厌恶的细节)。 因此,今天计划的任务队列将存储在列表的元素 `0` 处,明天排队等待在元素1处等待。 例 `15-1` 显示了调度程序。 diff --git a/ch15/02_Implementing_List.md b/ch15/02_Implementing_List.md index 5ea871b1..0e4eb112 100644 --- a/ch15/02_Implementing_List.md +++ b/ch15/02_Implementing_List.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Using_the_Methods_of_List.md) -## 实现List +### 实现List 在集合框架中有三个具体的 `List` 实现(参见图 `15-3`),它们执行界面定义的各种操作的速度以及它们在并发修改时的行为方式有所不同; 但是,与 `Set` 和 `Queue` 不同,`List` 没有子接口来指定功能行为的差异。 在本节和下一节中,我们依次查看每个实现并提供性能比较。 diff --git a/ch15/03_Comparing_List_Implementations.md b/ch15/03_Comparing_List_Implementations.md index b34d39c0..ddbf7a61 100644 --- a/ch15/03_Comparing_List_Implementations.md +++ b/ch15/03_Comparing_List_Implementations.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Implementing_List.md) -## 比较列表实现 +### 比较List实现 表 `15-1` 给出了 `List` 类的一些样例操作的比较性能。即使这里的选择比队列甚至集合要窄得多,也可以使用相同的消除过程。与队列一样,首先要问的问题是您的应用程序是否需要线程安全。如果是这样,你应该使用 `CopyOnWriteArrayList`,如果可以的话 - 也就是说,如果写入列表会相对不频繁。如果没有,你将不得不围绕 `ArrayList` 或 `LinkedList` 使用一个同步包装器(见 `17.3.1` 节)。 diff --git a/ch16/01_Using_the_Methods_of_Map.md b/ch16/01_Using_the_Methods_of_Map.md index ba72c4e7..cc16a1ea 100644 --- a/ch16/01_Using_the_Methods_of_Map.md +++ b/ch16/01_Using_the_Methods_of_Map.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_Maps.md) -## 使用 Map 的方法 +### 使用Map的方法 正如我们在前两章中所做的那样,将待办事项管理器置于优先级队列中的一个问题是优先级队列无法保留将元素添加到它们的顺序(除非可以按优先级顺序 例如作为时间戳或序列号)。 为了避免这种情况,我们可以使用一系列 `FIFO 队列作为替代模型,每个队列分配一个优先级。 一个 `Map` 适合于保持优先级与任务队列之间的关联; 特别是 `EnumMap` 是一个高效的 `Map` 实现,专门用于与枚举成员关键字一起使用。 diff --git a/ch16/02_Implementing_Map.md b/ch16/02_Implementing_Map.md index c69a9936..2da9f5e4 100644 --- a/ch16/02_Implementing_Map.md +++ b/ch16/02_Implementing_Map.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Using_the_Methods_of_Map.md) -## 实现 Map +### 实现Map 图 `16-2` 显示了集合框架为 `Map` 提供的实现,共八个实例。 我们将在这里讨论 `HashMap`,`LinkedHashMap`,`WeakHashMap`,`IdentityHashMap` 和 `EnumMap`; 讨论 `NavigableMap`,`ConcurrentMap` 和 `ConcurrentNavigableMap` 的接口及其实现,以下部分。 diff --git a/ch16/03_SortedMap_and_NavigableMap.md b/ch16/03_SortedMap_and_NavigableMap.md index ba7cfb09..c65090eb 100644 --- a/ch16/03_SortedMap_and_NavigableMap.md +++ b/ch16/03_SortedMap_and_NavigableMap.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Implementing_Map.md) -## SortedMap 和 NavigableMap +### SortedMap和NavigableMap ![](16_5.png) diff --git a/ch16/04_ConcurrentMap.md b/ch16/04_ConcurrentMap.md index a707fc6f..19702597 100644 --- a/ch16/04_ConcurrentMap.md +++ b/ch16/04_ConcurrentMap.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_SortedMap_and_NavigableMap.md) -## ConcurrentMap +### ConcurrentMap `Map` 通常用于高性能服务器应用程序中 - 例如,用作缓存实现 - 因此高吞吐量线程安全的地图实现是 `Java` 平台的重要组成部分。 同步地图(例如由 `Collections.synchronizedMap` 提供的 `Map`)无法满足此要求,因为在完全同步的情况下,每个操作都需要在整个地图上获得排他锁,从而有效地序列化对它的访问。 我们很快就会看到 `ConcurrentHashMap`,可以在吞吐量上获得非常大的增益,只锁定一部分集合。 但是因为客户端没有单独的锁来获得独占访问权限,所以客户端锁定不再起作用,并且客户端需要来自集合本身的帮助来执行原子动作。 diff --git a/ch16/05_ConcurrentNavigableMap.md b/ch16/05_ConcurrentNavigableMap.md index 7ae18cb3..0fbbf165 100644 --- a/ch16/05_ConcurrentNavigableMap.md +++ b/ch16/05_ConcurrentNavigableMap.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](04_ConcurrentMap.md) -## ConcurrentNavigableMap +### ConcurrentNavigableMap ![](16_7.png) diff --git a/ch16/06_Comparing_Map_Implementations.md b/ch16/06_Comparing_Map_Implementations.md index 7d8fd4c8..a2ecd745 100644 --- a/ch16/06_Comparing_Map_Implementations.md +++ b/ch16/06_Comparing_Map_Implementations.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](05_ConcurrentNavigableMap.md) -## 比较 Map 的实现 +### 比较Map的实现 表 `16-1` 显示了 `Map` 的不同平台实现的相对性能(“next”栏显示迭代器在密钥集上的下一次操作的开销)。 与队列的实现一样,您对 `map` 类的选择可能更多地受 到应用程序的功能需求和所需的并发属性的影响。 diff --git a/ch17/01_Generic_Algorithms.md b/ch17/01_Generic_Algorithms.md index fe14043d..71fcf981 100644 --- a/ch17/01_Generic_Algorithms.md +++ b/ch17/01_Generic_Algorithms.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](00_The_Collections_Class.md) -## 通用算法 +### 通用算法 通用算法分为四个主要类别:更改列表中的元素顺序,更改列表内容,查找集合中的极端值以及查找列表中的特定值。它们表示可重用的功能,因为它们可以应用于任何类型的列表(或在某些情况下适用于集合)。生成这些方法的类型导致了一些相当复杂的声明,因此每个部分都在声明之后简要地讨论这些声明。 diff --git a/ch17/02_Collection_Factories.md b/ch17/02_Collection_Factories.md index 658380bb..3bf07ff7 100644 --- a/ch17/02_Collection_Factories.md +++ b/ch17/02_Collection_Factories.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](01_Generic_Algorithms.md) -## 收集工厂 +### 收集工厂 `Collections` 类提供了创建某些包含零个或多个对同一对象的引用的集合的简便方法。 最简单的这种集合是空的: diff --git a/ch17/03_Wrappers.md b/ch17/03_Wrappers.md index ede4b6f7..ed17d21c 100644 --- a/ch17/03_Wrappers.md +++ b/ch17/03_Wrappers.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](02_Collection_Factories.md) -## 包装 +### 包装 `Collections` 类提供了包装对象,通过以下三种方式之一来修改标准集合类的行为:通过同步它们,使其不可修改,或通过检查添加到它们的元素的类型。这些包装器对象实现与包装对象相同的接口,并将它们的工作委托给它们。他们的目的是限制在哪些情况下进行这项工作。这些是使用保护代理的例子(参见 `Gamma`,`Helm`,`Johnson` 和 `Vlissides`,`Addison-Wesley` 的设计模式),代理模式的一个变体,代理控制对真实主体的访问。 diff --git a/ch17/04_Other_Methods.md b/ch17/04_Other_Methods.md index a44b44bf..e5595f38 100644 --- a/ch17/04_Other_Methods.md +++ b/ch17/04_Other_Methods.md @@ -1,7 +1,7 @@ 《《《 [返回首页](../README.md)
《《《 [上一节](03_Wrappers.md) -## 其他方法 +### 其他方法 `Collections` 类提供了许多实用方法,其中一些我们已经看到使用。 我们在这里按字母顺序审查它们。