From c7387d1f7fd793eb36c0d2437cfb34ceb393972f Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Tue, 23 Jun 2020 21:24:54 +0800 Subject: [PATCH] 2020-06-23 21:24:52 --- docs/46.md | 70 ++++++++++++++++++++++++++++-------------------------- docs/48.md | 32 ++++++++++++------------- docs/49.md | 50 +++++++++++++++++++------------------- docs/50.md | 4 ++-- 4 files changed, 79 insertions(+), 77 deletions(-) diff --git a/docs/46.md b/docs/46.md index be6e04d..6e73ea7 100644 --- a/docs/46.md +++ b/docs/46.md @@ -1,27 +1,29 @@ -# Java Hashmap 教程 +# Java `Hashmap`教程 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/java-hashmap/](https://javabeginnerstutorial.com/core-java-tutorial/java-hashmap/) -Java HashMap 是基于 HashTable 的 Map 实现。 这就是为什么面试官总是要求 HashMap 和 HashTable 之间存在差异的原因。 HashMap 基本上等于 HashTable,但以下两个区别除外。 +Java `HashMap`是基于哈希表的`Map`实现。 这就是为什么面试官总是要求`HashMap`和`HashTable`之间存在差异的原因。 `HashMap`基本上等于`HashTable`,但以下两个区别除外。 -1. 当 HashTable 同步时,HashMap 不同步。 -2. HashMap 允许为 null,而 HashTable 不允许为 null。 +1. 当`HashTable`同步时,`HashMap`不同步。 +2. `HashMap`允许为`null`,而`HashTable`不允许为`null`。 -## HashMap 的重要属性 +## `HashMap`的重要属性 -| **`DEFAULT_INITIAL_CAPACITY`** | 默认初始容量(2 次幂 n)。 HashMap 可以包含许多元素。 | -| **`MAXIMUM_CAPACITY`** | HashMap 的最大容量(2 次幂 n)。 | -| **`loadFactor`** | 定义 HashMap 的阈值。 重新调整大小时将在 HashMap 中发生。 | -| **`DEFAULT_LOAD_FACTOR`** | 在 HashMap 的构造器中未定义任何负载因子时将使用。 | -| **`size`** | HashMap 包含的键/值对映射数。 | +| | | +| --- | --- | +| **`DEFAULT_INITIAL_CAPACITY`** | 默认初始容量(2 的 n 次幂)。 `HashMap`可以包含许多元素。 | +| **`MAXIMUM_CAPACITY`** | `HashMap`的最大容量(2 的 n 次幂)。 | +| **`loadFactor`** | 定义`HashMap`的阈值。 重新调整大小时将在`HashMap`中发生。 | +| **`DEFAULT_LOAD_FACTOR`** | 在`HashMap`的构造器中未定义任何负载因子时将使用。 | +| **`size`** | `HashMap`包含的键/值对映射数。 | -## 创建 HashMap +## 创建`HashMap` -在创建 HashMap 时未定义任何参数时,将使用默认的初始容量(16)和默认的负载系数(0.75)。 该 HashMap 最多可以包含 16 个元素,并且在插入第 13 个元素时会调整 HashMap 的大小。 这是因为负载系数为 75% (。75),并且在添加第 13 个元素(12 + 1)时将超过此阈值。 +在创建`HashMap`时未定义任何参数时,将使用默认的初始容量(16)和默认的负载系数(0.75)。 该`HashMap`最多可以包含 16 个元素,并且在插入第 13 个元素时会调整`HashMap`的大小。 这是因为负载系数为 75% (.75),并且在添加第 13 个元素(`12 + 1`)时将超过此阈值。 -您还可以提供初始容量和 loadFactor。 但是初始容量不能超过最大容量(2 功率 30),并且负载系数不能为零或负数。 +您还可以提供初始容量和`loadFactor`。 但是初始容量不能超过最大容量(2 的 30 次幂),并且负载系数不能为零或负数。 -## HashMap 中元素的添加 +## `HashMap`中元素的添加 为了添加一个元素,您需要提供 2 个东西:键和值。 @@ -29,52 +31,52 @@ Java HashMap 是基于 HashTable 的 Map 实现。 这就是为什么面试官 **值**:与指定键关联的值。 -首先,HashMap 将为给定密钥生成一个哈希码,然后检查是否已经有与给定密钥相关联的值。 如果是,则它将返回已经关联的值。 否则,它将通过提供的键在 HashMap 中增加价值。 +首先,`HashMap`将为给定密钥生成一个哈希码,然后检查是否已经有与给定密钥相关联的值。 如果是,则它将返回已经关联的值。 否则,它将通过提供的键在`HashMap`中增加价值。 ## 重点 -1. HashMap 不会按 Map 中的元素顺序提供任何保证(均值顺序会随时间变化)。 -2. HashMap 为**获得**和**设置**操作提供恒定时间性能(如果使用正确的哈希算法)。 -3. 迭代收集所需的时间与 HashMap 的“**容量**”((它可以容纳的元素)和**大小**(它当前容纳的元素)成比例。 +1. `HashMap`不会按`Map`中的元素顺序提供任何保证(均值顺序会随时间变化)。 +2. `HashMap`为**获得**和**设置**操作提供恒定时间性能(如果使用正确的哈希算法)。 +3. 迭代收集所需的时间与`HashMap`的“**容量**”(它可以容纳的元素)和**大小**(它当前容纳的元素)成比例。 4. 如果迭代性能更为重要,那么建议不要将初始容量设置得太高而将负载系数设置得太低。 由于性能与*初始容量*和*负载系数*成正比。 * *容量*是哈希表中的存储桶数。 * 初始容量(默认值为 16)只是创​​建哈希表时的容量。 * *负载因子(默认值 .75)*是衡量哈希表在自动增加其容量之前的填充程度的度量。 * 当哈希表中的条目数超过负载因子与当前容量的乘积时,哈希表将被*重映射*(即内部数据结构将被重建)。 5. 使用“`Collections.synchronizedMap()`”方法使映射同步。 -6. 由 HashMap 类返回的 迭代器为“**故障快速**”。 -7. HashMap 由 Array(Key)和 LinkedList(Value)支持。 -8. HashMap 使用 hashcode(使用密钥)来标识应在 HashMap 中放置或检索对象的确切位置。 -9. 最后,HashCode 返回后备数组中的确切位置(索引)。 -10. 支持数组的大小固定。 因此,只要 Array 已满(此映射中的键数达到其阈值)。 将创建一个具有新容量的新数组,并将所有元素添加到该新数组中。 -11. 在两种情况下(添加和检索对象)都将使用 HashCode,而在任何情况下均可以使用或可以不使用 equals()方法。 -12. HashMap 中 Key 的最佳候选者是具有正确实现 Equals 和 Hashcode 方法的不可变类(示例:字符串类)。 -13. 更好的哈希码和 equals 方法实现是 HashMap 的更好性能。 -14. 这样,所有基本体的 String 和 Wrapper 类将是 HashMap 中键的理想选择。 +6. 由`HashMap`类返回的迭代器为“**故障快速**”。 +7. `HashMap`由数组(`Key`)和`LinkedList`(`Value`)支持。 +8. `HashMap`使用`hashcode`(使用密钥)来标识应在`HashMap`中放置或检索对象的确切位置。 +9. 最后,`HashCode`返回后备数组中的确切位置(索引)。 +10. 支持数组的大小固定。 因此,只要数组已满(此映射中的键数达到其阈值)。 将创建一个具有新容量的新数组,并将所有元素添加到该新数组中。 +11. 在两种情况下(添加和检索对象)都将使用`HashCode`,而在任何情况下均可以使用或可以不使用`equals()`方法。 +12. `HashMap`中`Key`的最佳候选者是具有正确实现`Equals`和`Hashcode`方法的不可变类(示例:字符串类)。 +13. 更好的哈希码和`equals`方法实现是`HashMap`的更好性能。 +14. 这样,所有`String`和原始类型的包装类将是`HashMap`中键的理想选择。 # 什么是重新哈希 -每个 HashMap 都有预定义的大小(初始容量),以及在需要时(超过阈值限制时)增加此大小(负载系数)的逻辑。 +每个`HashMap`都有预定义的大小(初始容量),以及在需要时(超过阈值限制时)增加此大小(负载系数)的逻辑。 **示例**: -使用以下配置创建 HashMap +使用以下配置创建`HashMap` -初始容量= 16(*默认初始容量*) +初始容量:16(*默认初始容量*) 负载系数:.75(*默认负载系数*) -在给定的 HashMap 中添加第 13 个元素后,超过给定 HashMap 的阈值限制,系统将创建一个新的后备键集数组(此数组的大小将是前一个数组的两倍)。 系统将不得不再次计算确切的存储桶,应放置上一个存储桶中的元素,并将旧 HashMap 中的所有元素复制到新的 HashMap 中。 整个过程称为 ReHashing,因为会再次为每个元素计算 Hashcode。 +在给定的`HashMap`中添加第 13 个元素后,超过给定`HashMap`的阈值限制,系统将创建一个新的后备键集数组(此数组的大小将是前一个数组的两倍)。 系统将不得不再次计算确切的存储桶,应放置上一个存储桶中的元素,并将旧`HashMap`中的所有元素复制到新的`HashMap`中。 整个过程称为重新哈希,因为会再次为每个元素计算`Hashcode`。 -因为超时的 HashMap 可能会被重新散布并且订单可能会发生变化。 +因为超时的`HashMap`可能会被重新散布并且订单可能会发生变化。 -# HashMap 的例子 +# `HashMap`的例子 在此示例中,您将学到以下几点 1. 如何迭代映射 2. 迭代映射的不同方法 -3. HashCode 和 Equals 何时被调用。 (请特别注意 HashCode 的输出和 equals 方法调用) +3. `HashCode`和`Equals`何时被调用。 (请特别注意`HashCode`的输出和`equals`方法调用) ```java import java.util.HashMap; diff --git a/docs/48.md b/docs/48.md index cdd24c0..595edd6 100644 --- a/docs/48.md +++ b/docs/48.md @@ -1,32 +1,32 @@ -# Java 初学者列表收集教程 +# Java 初学者`List`集合教程 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/list-collection-tutorial-for-java-beginners/](https://javabeginnerstutorial.com/core-java-tutorial/list-collection-tutorial-for-java-beginners/) -在这里,我们将详细了解 List 接口及其不同实现。 `java.util`包中的列表接口是 java.util.Collection 接口的子类型。 +在这里,我们将详细了解`List`接口及其不同实现。 `java.util`包中的列表接口是`java.util.Collection`接口的子类型。 -## 列出接口显着点 +## `List`接口显着点 1. 它是`java.util`包的一部分。 2. 它是`java.util.Collection`接口的子类型。 -3. 列表是**有序集合**。 意味着可以按有序方式(按索引)访问 List 的元素。 +3. 列表是**有序集合**。 意味着可以按有序方式(按索引)访问`List`的元素。 4. 允许重复值。 -5. 允许为 NULL 值。 -6. List 有一个名为 ListIterator 的特殊迭代器。 这将有助于双向遍历列表。 -7. List 可以完全控制每个元素的插入位置。 +5. 允许为`NULL`值。 +6. `List`有一个名为`ListIterator`的特殊迭代器。 这将有助于双向遍历列表。 +7. `List`可以完全控制每个元素的插入位置。 -## 列表界面可用的操作 +## `List`界面可用的操作 * 位置访问 * 搜索 * 迭代 * 范围视图 -## 列表接口的具体实现 +## `List`接口的具体实现 -* java.util.ArrayList -* java.util.LinkedList -* java.util.Vector -* java.util.Stack +* `java.util.ArrayList` +* `java.util.LinkedList` +* `java.util.Vector` +* `java.util.Stack` ## 创建列表实例 @@ -70,7 +70,7 @@ listA.add(0, "element 0"); ## 访问元素 -**语法**: E set(int index,E element); +**语法**:`E set(int index, E element);` **用途**:用于返回指定位置的元素 @@ -78,7 +78,7 @@ listA.add(0, "element 0"); ## 替换元素 -**语法**:E set(int index, E element); +**语法**:`E set(int index, E element);` **用途**:用于替换列表中指定位置的元素。 @@ -87,4 +87,4 @@ listA.add(0, "element 0"); ## 性能点 * 列表界面具有搜索对象的方法。 但是不应使用相同的方法,因为它会降低性能,因为在某些实现中它将使用线性搜索。 -* 列表可以包含另一个列表作为元素,但是 HashCode 和 Equals 不适用于这些列表,因此不应使用相同的列表。 \ No newline at end of file +* 列表可以包含另一个列表作为元素,但是`HashCode`和`Equals`不适用于这些列表,因此不应使用相同的列表。 \ No newline at end of file diff --git a/docs/49.md b/docs/49.md index 7d334f8..47da249 100644 --- a/docs/49.md +++ b/docs/49.md @@ -1,21 +1,21 @@ -# Java 初学者的映射收藏教程 +# Java 初学者的`Map`集合教程 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/map-collection-tutorial-for-java-beginners/](https://javabeginnerstutorial.com/core-java-tutorial/map-collection-tutorial-for-java-beginners/) -Map 是 Java Collection 框架下的一个 Interface。 +`Map`是 Java 集合框架下的一个接口。 -# 映射界面的主要特征 +# `Map`界面的主要特征 * 它是一个用于将键映射到值的对象。 * 映射不能包含重复值。 * 每个键最多可以映射到一个值。 -* 该接口替代了 Dictionary 类,后者是一个抽象类,而不是 Interface。 -* Map 界面允许 3 个集合视图 - * 套钥匙 - * 价值集合 +* 该接口替代了`Dictionary`类,后者是一个抽象类,而不是接口。 +* `Map`界面允许 3 个集合视图 + * 键集 + * 值集 * 键值映射集 -* 由于 Map 如上所述提供了 3 个视图,因此您可以迭代键,值或键值对。 -* 可以在迭代过程中以安全的方式从 Map 中删除条目。 +* 由于`Map`如上所述提供了 3 个视图,因此您可以迭代键,值或键值对。 +* 可以在迭代过程中以安全的方式从`Map`中删除条目。 * 不允许映射包含自身作为键。 * 映射可以包含自身作为值。 * 一些映射实现可以包含的键和值有一些限制。 @@ -23,26 +23,26 @@ Map 是 Java Collection 框架下的一个 Interface。 # 具体映射实现 -* HashMap -* 哈希表 -* EnumMap -* IdentityHashMap -* LinkedHashMap -* 属性 -* 树形图 -* WeakHashMap -* ConcurrentSkipListMap -* ConcurrentHashMap +* `HashMap` +* `HashTable` +* `EnumMap` +* `IdentityHashMap` +* `LinkedHashMap` +* `Properties` +* `TreeMap` +* `WeakHashMap` +* `ConcurrentSkipListMap` +* `ConcurrentHashMap` -# 映射界面中的重要方法 +# `Map`界面中的重要方法 * **`put(K key, V value)`**:使用指定的键将指定的值放入映射中。 -* **`putAll(Map m)`**:将所有映射从给定 Map 复制到此 Map。 +* **`putAll(Map m)`**:将所有映射从给定`Map`复制到此`Map`。 * **`keySet()`**:返回包含此映射中的密钥的**集**。 -* **`values()`**:返回一个**集合**,其中包含此 Map 中的所有值。 -* **`isEmpty()`**:检查给定 Map 中是否有任何元素。 +* **`values()`**:返回一个**集合**,其中包含此`Map`中的所有值。 +* **`isEmpty()`**:检查给定`Map`中是否有任何元素。 * **`remove(Object key)`**:从此映射中删除键的映射(如果存在)。 * **`containsKey(Object key)`**:检查指定键是否存在任何映射。 -* **`containsValue(Object value)`**:检查是否存在用于指定 Object 的任何映射(可能不止一个)。 +* **`containsValue(Object value)`**:检查是否存在用于指定对象的任何映射(可能不止一个)。 * **`get(Object key)`**:返回与此键关联的值。 -* **`clear() `**:Used to remove all the mapping in given Map. \ No newline at end of file +* **`clear() `**:用于从给定映射中移除所有映射。 \ No newline at end of file diff --git a/docs/50.md b/docs/50.md index 156dfce..51f0871 100644 --- a/docs/50.md +++ b/docs/50.md @@ -1,8 +1,8 @@ -# Java 初学者的集合教程 +# Java 初学者的`Set`教程 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/set-collection-tutorial-for-java-beginners/](https://javabeginnerstutorial.com/core-java-tutorial/set-collection-tutorial-for-java-beginners/) -Set 是 Java Collection Framework 的一部分。 Set 是 *java.util* 程序包中的一个接口。 它实现了 Collection 接口。 +`Set`是 Java 集合框架的一部分。 `Set`是 *java.util* 程序包中的一个接口。 它实现了 Collection 接口。 # 与集合有关的要点 -- GitLab