diff --git a/docs/java-collection/41.md b/docs/java-collection/41.md index 4da5e4ad807642becf8bacfd97cc1caad62a5dd8..d762869a49a87ef26220ac613b429c96cb256642 100644 --- a/docs/java-collection/41.md +++ b/docs/java-collection/41.md @@ -2,11 +2,11 @@ > 原文: [https://beginnersbook.com/2013/12/how-to-convert-arraylist-to-string-array-in-java/](https://beginnersbook.com/2013/12/how-to-convert-arraylist-to-string-array-in-java/) -在这篇文章中,我们共享了两种转换 [ArrayList](https://beginnersbook.com/2013/12/java-arraylist/ "ArrayList") < String>的方法。到 String 数组。 +在这篇文章中,我们共享了两种转换[`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/)到`String`数组的方法。 ### 方法 1:使用`ArrayList get()`方法手动转换 -这是将所有 `ArrayList<String>` 元素复制到`String Array[]`的手动方式。在这个例子中,我们通过三个步骤将整个列表复制到数组中 a)首先我们使用`size()`方法获得 ArrayList 大小 b)使用`get()`方法获取列表的每个元素,最后 c)将每个元素分配给相应的数组元素使用赋值`= operator`。 +这是将所有`ArrayList`元素复制到`String Array[]`的手动方式。在这个例子中,我们通过三个步骤将整个列表复制到数组中 a)首先我们使用`size()`方法获得`ArrayList`大小 b)使用`get()`方法获取列表的每个元素,最后 c)将每个元素分配给相应的数组元素使用赋值运算符`=`。 ```java package beginnersbook.com; @@ -48,7 +48,7 @@ String4 ### 方法 2:使用`toArray()`方法进行转换 -在上面的例子中,我们手动将`ArrayList`的每个元素复制到数组中。但是有一个方法`toArray()`可以将字符串类型的 ArrayList 转换为字符串数组。更多关于 [toArray()的信息](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#toArray())。 +在上面的例子中,我们手动将`ArrayList`的每个元素复制到数组中。但是有一个方法`toArray()`可以将字符串类型的`ArrayList`转换为字符串数组。更多关于[`toArray()`的信息](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#toArray())。 ```java package beginnersbook.com; diff --git a/docs/java-collection/42.md b/docs/java-collection/42.md index 9a684c25a345c77c9ea37ee9f5ed0f7e875b1355..28b6c0dffba88608dc9f3e560276aa7ebb8e2d5c 100644 --- a/docs/java-collection/42.md +++ b/docs/java-collection/42.md @@ -2,19 +2,19 @@ > 原文: [https://beginnersbook.com/2013/12/how-to-convert-array-to-arraylist-in-java/](https://beginnersbook.com/2013/12/how-to-convert-array-to-arraylist-in-java/) -在上一个教程中,我们共享了两个使用示例将 ArrayList 转换为 Array 的方法[。这里我们分享三种不同的方式将 Array 转换为 ArrayList。基本上我们将 String Array 转换为 String 类型的 ArrayList。](https://beginnersbook.com/2013/12/how-to-convert-arraylist-to-string-array-in-java/) +在上一个教程中,我们共享了两个使用示例将`ArrayList`转换为数组的方法。这里我们分享三种不同的方式将数组转换为`ArrayList`。基本上我们将`String`数组转换为`String`类型的`ArrayList`。 -`String array[] to ArrayList<String>` +`String array[] to ArrayList` ### 方法 1:使用`Arrays.asList()`进行转换 句法: -`ArrayList<T> arraylist= new ArrayList<T>(Arrays.asList(arrayname));` +`ArrayList arraylist = new ArrayList(Arrays.asList(arrayname));` 例: -在这个例子中,我们使用 [Arrays.asList](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...)) 方法将`Array`转换为`ArrayList`。 +在这个例子中,我们使用[`Arrays.asList`](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...))方法将`Array`转换为`ArrayList`。 ```java import java.util.*; @@ -54,17 +54,21 @@ New City3 ### 方法 2:`Collections.addAll`方法 -[Collections.addAll](https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#addAll(java.util.Collection, T...)) 方法将所有数组元素添加到指定的集合中。这就是调用`Collections.addAll`方法的方法。它与`Arrays.asList`方法的作用相同,但它比它快得多,因此性能方面这是将数组转换为`ArrayList`的最佳方法。 +`Collections.addAll`方法将所有数组元素添加到指定的集合中。这就是调用`Collections.addAll`方法的方法。它与`Arrays.asList`方法的作用相同,但它比它快得多,因此性能方面这是将数组转换为`ArrayList`的最佳方法。 -`String array[]={new Item(1), new Item(2), new Item(3), new Item(4)}; +```java +String array[]={new Item(1), new Item(2), new Item(3), new Item(4)}; ArrayList<T> arraylist = new ArrayList<T>(); -Collections.addAll(arraylist, array);` +Collections.addAll(arraylist, array); +``` 或 -` + +```java Collections.addAll(arraylist, new Item(1), new Item(2), new Item(3), new Item(4)); -` -实施例 +```` + +实现示例 ```java import java.util.*; @@ -94,7 +98,7 @@ public class Example2 { } ``` -产量 +结果: ```java Hi diff --git a/docs/java-collection/44.md b/docs/java-collection/44.md index 818c012a8f2058eda8020cc47c3b924044a140a2..dcb05b8dd779d2496e69acc7fcf1d23739a976a6 100644 --- a/docs/java-collection/44.md +++ b/docs/java-collection/44.md @@ -2,41 +2,41 @@ > 原文: [https://beginnersbook.com/2013/12/difference-between-arraylist-and-vector-in-java/](https://beginnersbook.com/2013/12/difference-between-arraylist-and-vector-in-java/) -[ArrayList](https://beginnersbook.com/2013/12/java-arraylist/) 和 [Vector](https://beginnersbook.com/2013/12/vector-in-java/) 都在内部使用 Array 作为数据结构。但是,它们存储和处理数据的方式几乎没有差异。在这篇文章中,我们将讨论 ArrayList 和 Vector 之间的差异和相似之处。 +[`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/)和[`Vector`](https://beginnersbook.com/2013/12/vector-in-java/) 都在内部使用数组作为数据结构。但是,它们存储和处理数据的方式几乎没有差异。在这篇文章中,我们将讨论`ArrayList`和`Vector`之间的差异和相似之处。 ## `ArrayList` Vs `Vector`: -1)**同步**:ArrayList 是非同步的,这意味着多个线程可以同时在 ArrayList 上工作。对于例如如果一个线程正在对 ArrayList 执行添加操作,则可能有另一个线程在多线程环境中同时对 ArrayList 执行删除操作 +1)**同步**:`ArrayList`是非同步的,这意味着多个线程可以同时在`ArrayList`上工作。对于例如如果一个线程正在对`ArrayList`执行添加操作,则可能有另一个线程在多线程环境中同时对`ArrayList`执行删除操作 -Vector 同步。这意味着如果一个线程正在处理 Vector,则没有其他线程可以获取它。与 ArrayList 不同,一次只有一个线程可以对向量执行操作。 +`Vector`同步。这意味着如果一个线程正在处理`Vector`,则没有其他线程可以获取它。与`ArrayList`不同,一次只有一个线程可以对向量执行操作。 -2)**调整大小:** ArrayList 和 Vector 都可以动态增长和缩小以保持存储的最佳使用,但是它们调整大小的方式是不同的。调整大小时,ArrayList 的大小增加一半,而增长时,Vector 默认大小增加一倍。 +2)**调整大小:**`ArrayList`和`Vector`都可以动态增长和缩小以保持存储的最佳使用,但是它们调整大小的方式是不同的。调整大小时,`ArrayList`的大小增加一半,而增长时,`Vector`默认大小增加一倍。 -3)**性能**:ArrayList 提供更好的性能,因为它是非同步的。向量操作性能较差,因为它们是线程安全的,在 Vector 上工作的线程会对其进行锁定,这使得其他线程等待直到锁定被释放。 +3)**性能**:`ArrayList`提供更好的性能,因为它是非同步的。向量操作性能较差,因为它们是线程安全的,在`Vector`上工作的线程会对其进行锁定,这使得其他线程等待直到锁定被释放。 -4)**失败快速**:首先让我解释什么是快速失败:如果集合(ArrayList,vector 等)通过任何方式进行结构修改,除了**添加或删除方法**迭代器,在创建迭代器后,迭代器将抛出 [`ConcurrentModificationException`](https://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html) 。结构修饰是指从集合中添加或删除元素。 +4)**快速失败**:首先让我解释什么是快速失败:如果集合(`ArrayList`,`vector`等)通过任何方式进行结构修改,除了**添加或删除方法**,在创建迭代器后,迭代器将抛出[`ConcurrentModificationException`](https://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html)。结构修改是指从集合中添加或删除元素。 -根据 [Vector javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html "javadoc") ,Vector 返回的枚举不是快速失败的。另一方面,ArrayList 返回的 iterator 和 listIterator 是快速失​​败的。 +根据[`Vector` javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html "javadoc"),`Vector`返回的迭代器不是快速失败的。另一方面,`ArrayList`返回的`iterator`和`listIterator`是快速失​​败的。 -5)**谁真的属于集合框架?** 该向量不是集合框架的一部分,它已被包含在集合中。它可以被视为旧版代码。关于 List 集合不能做的 Vector 没有任何内容。因此应避免使用 Vector。如果需要线程安全操作,则使 ArrayList 同步,如本文下一节所述,或者使用 [CopyOnWriteArrayList](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html) ,它是 ArrayList 的线程安全变体。 +5)**谁真的属于集合框架?** 该向量不是集合框架的一部分,它已被包含在集合中。它可以被视为旧版代码。`Vector`没有任何`List`集合不能做的内容。因此应避免使用`Vector`。如果需要线程安全操作,则使`ArrayList`同步,如本文下一节所述,或者使用[`CopyOnWriteArrayList`](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html),它是`ArrayList`的线程安全变体。 这些类之间的**相似性很少,如下所示:** -1. Vector 和 ArrayList 都使用可扩展的数组数据结构。 -2. 这些类(Vector 和 ArrayList)返回的迭代器和 listIterator 是快速失​​败的。 +1. `Vector`和`ArrayList`都使用可扩展的数组数据结构。 +2. 这些类(`Vector`和`ArrayList`)返回的迭代器和`listIterator`是快速失​​败的。 3. 它们都是有序的集合类,因为它们维护元素的插入顺序。 -4. 向量& ArrayList 都允许重复和空值。 +4. 向量和`ArrayList`都允许重复和空值。 5. 当溢出和删除发生时,它们会自动增长和缩小。 ### 何时使用`ArrayList`以及何时使用`Vector`? 这完全取决于要求。如果需要执行“线程安全”操作,则向量是最好的选择,因为它确保一次只有一个线程访问集合。 -**性能:**同步操作比非同步操作消耗更多时间,因此如果不需要线程安全操作,ArrayList 是更好的选择,因为并发进程会提高性能。 +**性能:**同步操作比非同步操作消耗更多时间,因此如果不需要线程安全操作,`ArrayList`是更好的选择,因为并发进程会提高性能。 -**如何使 ArrayList 同步?** +**如何使`ArrayList`同步?** -如上所述,ArrayList 方法是非同步的,但如果有需要,你可以让它们像这样同步 - +如上所述,`ArrayList`方法是非同步的,但如果有需要,你可以让它们像这样同步 - ```java //Use Collecions.synzhonizedList method @@ -56,5 +56,5 @@ synchronized (list) { #### 参考文献: -* [向量文档](https://docs.oracle.com/javase/6/docs/api/java/util/Vector.html) -* [ArrayList 文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html) \ No newline at end of file +* [`Vector`文档](https://docs.oracle.com/javase/6/docs/api/java/util/Vector.html) +* [`ArrayList`文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html) \ No newline at end of file diff --git a/docs/java-collection/45.md b/docs/java-collection/45.md index 7e3d40aacf6cd443e8fd025c72d5c119d1ad1227..d82a9698a1977d6626a7f541d6d00d9623ad072f 100644 --- a/docs/java-collection/45.md +++ b/docs/java-collection/45.md @@ -2,13 +2,13 @@ > 原文: [https://beginnersbook.com/2013/12/difference-between-arraylist-and-hashmap-in-java/](https://beginnersbook.com/2013/12/difference-between-arraylist-and-hashmap-in-java/) -[ArrayList](https://beginnersbook.com/2013/12/java-arraylist/) 和 [HashMap](https://beginnersbook.com/2013/12/hashmap-in-java-with-example/) 是 Java 中常用的两个集合类。尽管两者都是集合框架的一部分,但它们存储和处理数据的方式却完全不同。在这篇文章中,我们将看到这两个集合之间的主要区别。 +[`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/) 和 [`HashMap`](https://beginnersbook.com/2013/12/hashmap-in-java-with-example/) 是 Java 中常用的两个集合类。尽管两者都是集合框架的一部分,但它们存储和处理数据的方式却完全不同。在这篇文章中,我们将看到这两个集合之间的主要区别。 ## Java 中的`ArrayList`与`HashMap` -1)**实现**: **ArrayList** 实现 List 接口,而 **HashMap** 是 Map 接口的实现。 List 和 Map 是两个完全不同的集合接口。 +1)**实现**:`ArrayList`实现`List`接口,而`HashMap`是`Map`接口的实现。`List`和`Map`是两个完全不同的集合接口。 -2)**内存消耗**:ArrayList 单独存储元素的值,并在内部维护每个元素的索引。 +2)**内存消耗**:`ArrayList`单独存储元素的值,并在内部维护每个元素的索引。 ```java ArrayList arraylist = new ArrayList(); @@ -16,7 +16,7 @@ arraylist.add("Test String"); ``` -HashMap 存储密钥和&价值对。对于每个值,必须在 HashMap 中关联一个键。这清楚地表明,与 ArrayList 相比,HashMap 中的内存消耗很高。 +`HashMap`存储键值对。对于每个值,必须在`HashMap`中关联一个键。这清楚地表明,与`ArrayList`相比,`HashMap`中的内存消耗很高。 ```java HashMap hmap= new HashMap(); @@ -24,15 +24,15 @@ HashMap hmap= new HashMap(); hmap.put(123, "Test String"); ``` -3) **Order** :ArrayList 维护插入顺序,而 HashMap 则没有。这意味着 ArrayList 以与插入列表相同的顺序返回列表项。另一方面,HashMap 不维护任何顺序,返回的键值对不按任何顺序排序。 +3) **顺序** :`ArrayList`维护插入顺序,而`HashMap`则没有。这意味着`ArrayList`以与插入列表相同的顺序返回列表项。另一方面,`HashMap`不维护任何顺序,返回的键值对不按任何顺序排序。 4)**重复**:`ArrayList`允许重复元素,但`HashMap`不允许重复键(它允许重复值)。 -5) **Nulls** :ArrayList 可以包含任意数量的 null 元素。 HashMap 允许一个空键和任意数量的空值。 +5) **空值** :`ArrayList`可以包含任意数量的`null`元素。`HashMap`允许一个空键和任意数量的空值。 -6) **get 方法**:在 ArrayList 中我们可以**通过指定它的索引得到**元素。在 HashMap 中,通过指定相应的键来获取元素。 +6) **`get`方法**:在`ArrayList`中我们可以**通过指定它的索引得到**元素。在`HashMap`中,通过指定相应的键来获取元素。 #### 参考文献: -* [HashMap javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html) -* [ArrayList 文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html) \ No newline at end of file +* [`HashMap` javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html) +* [`ArrayList`文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html) \ No newline at end of file diff --git a/docs/java-collection/46.md b/docs/java-collection/46.md index 27a3099e76042a2ff15323cfd632d8ab3df9e4d7..9d0721791da3229bd0063ffd509af67c1cd91a45 100644 --- a/docs/java-collection/46.md +++ b/docs/java-collection/46.md @@ -2,38 +2,38 @@ > 原文: [https://beginnersbook.com/2013/12/difference-between-arraylist-and-linkedlist-in-java/](https://beginnersbook.com/2013/12/difference-between-arraylist-and-linkedlist-in-java/) -[ArrayList](https://beginnersbook.com/2013/12/java-arraylist/ "ArrayList") 和 [LinkedList](https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/ "LinkedList") 都实现了 List 接口,它们的方法和结果几乎相同。然而,它们之间几乎没有差异,这取决于要求,使一个优于另一个。 +[`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/)和[`LinkedList`](https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/)都实现了`List`接口,它们的方法和结果几乎相同。然而,它们之间几乎没有差异,这取决于要求,使一个优于另一个。 ## `ArrayList`与`LinkedList` -1)**搜索**:与 LinkedList 搜索操作相比,ArrayList 搜索操作非常快。 ArrayList 中的`get(int index)`给出`O(1)`的性能,而 LinkedList 性能为`O(n)`。 +1)**搜索**:与`LinkedList`搜索操作相比,`ArrayList`搜索操作非常快。`ArrayList`中的`get(int index)`给出`O(1)`的性能,而`LinkedList`性能为`O(n)`。 -原因:ArrayList 维护其元素的基于索引的系统,因为它隐式使用数组数据结构,这使得搜索列表中的元素更快。另一方面,LinkedList 实现了**双向链表**,它需要遍历遍历搜索元素的所有元素。 +原因:`ArrayList`维护其元素的基于索引的系统,因为它隐式使用数组数据结构,这使得搜索列表中的元素更快。另一方面,`LinkedList`实现了**双向链表**,它需要遍历所有元素来搜索元素。 -2)**删除**:LinkedList 删除操作给出`O(1)`性能,而 ArrayList 提供可变性能:`O(n)`在最坏的情况下(同时删除第一个元素)和`O(1)`在最好的情况下(删除最后一个元素)。 +2)**删除**:`LinkedList`删除操作给出`O(1)`性能,而`ArrayList`提供可变性能:在最坏的情况下`O(n)`(删除第一个元素)和在最好的情况下`O(1)`(删除最后一个元素)。 -结论:与 ArrayList 相比,LinkedList 元素删除更快。 +结论:与`ArrayList`相比,`LinkedList`元素删除更快。 -原因:LinkedList 的每个元素都维护着两个指针(地址),这些指针指向列表中的两个邻居元素。因此,移除仅需要改变将要移除的节点的两个相邻节点(元素)中的指针位置。在 ArrayList 中,需要移动所有元素以填充由 remove 元素创建的空间。 +原因:`LinkedList`的每个元素都维护着两个指针(地址),这些指针指向列表中的两个邻居元素。因此,移除仅需要改变将要移除的节点的两个相邻节点(元素)中的指针位置。在`ArrayList`中,需要移动所有元素以填充由要移除的元素创建的空间。 -3)**插入性能**:LinkedList add 方法给出`O(1)`性能,而 ArrayList 在最坏情况下给出`O(n)`。原因与删除说明相同。 +3)**插入性能**:`LinkedList add`方法给出`O(1)`性能,而`ArrayList`在最坏情况下给出`O(n)`。原因与删除说明相同。 -4)**内存开销**:ArrayList 维护索引和元素数据,而 LinkedList 维护元素数据和相邻节点的两个指针,因此 LinkedList 中的内存消耗比较高。 +4)**内存开销**:`ArrayList`维护索引和元素数据,而`LinkedList`维护元素数据和相邻节点的两个指针,因此`LinkedList`中的内存消耗比较高。 这些类之间的**相似性很少,如下所示:** -1. ArrayList 和 LinkedList 都是 List 接口的实现。 -2. 它们都维护元素的插入顺序,这意味着在显示 ArrayList 和 LinkedList 元素时,结果集将具有将元素插入 List 的相同顺序。 -3. 这两个类都是非同步的,可以使用 [`Collections.synchronizedList`](https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List)) 方法显式同步。 -4. 这些类返回的迭代器和 listIterator 是快速失​​败的(如果在创建迭代器之后的任何时候对列表进行结构修改,除非通过迭代器自己的 remove 或 add 方法,迭代器将抛出 [ConcurrentModificationException](https://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html) )。 +1. `ArrayList`和`LinkedList`都是`List`接口的实现。 +2. 它们都维护元素的插入顺序,这意味着在显示`ArrayList`和`LinkedList`元素时,结果集将具有将元素插入`List`的相同顺序。 +3. 这两个类都是非同步的,可以使用[`Collections.synchronizedList`](https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List))方法显式同步。 +4. 这些类返回的迭代器和`listIterator`是快速失​​败的(如果在创建迭代器之后的任何时候对列表进行结构修改,除非通过迭代器自己的`remove`或`add`方法,迭代器将抛出 [`ConcurrentModificationException`](https://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html))。 ### 何时使用`LinkedList`以及何时使用`ArrayList`? -1)如上所述,与 ArrayList(`O(n)`)相比,insertList 和 remove 操作在 LinkedList 中提供了良好的性能(`O(1)`)。因此,如果在应用中需要频繁添加和删除,则 LinkedList 是最佳选择。 +1)如上所述,与 ArrayList(`O(n)`)相比,`insertList`和`remove`操作在`LinkedList`中提供了良好的性能(`O(1)`)。因此,如果在应用中需要频繁添加和删除,则`LinkedList`是最佳选择。 -2)搜索(get 方法)操作在 Arraylist(`O(1)`)中很快但在 LinkedList(`O(n)`中)没有,因此如果添加和删除操作较少且搜索操作要求较多,则 ArrayList 将是您最好的选择。 +2)搜索(`get`方法)操作在`Arraylist`(`O(1)`)中很快但在`LinkedList`(`O(n)`中)没有,因此如果添加和删除操作较少且搜索操作要求较多,则`ArrayList`将是您最好的选择。 #### 参考文献: -* [ArrayList 文档](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html) -* [LinkedList Javadoc](https://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html) \ No newline at end of file +* [`ArrayList`文档](https://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html) +* [`LinkedList` Javadoc](https://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html) \ No newline at end of file