企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# java 中的`ArrayList` - 集合框架 > 原文: [https://beginnersbook.com/2013/12/java-arraylist/](https://beginnersbook.com/2013/12/java-arraylist/) `Arraylist`类实现`List`接口,它基于`Array`数据结构。由于其提供的功能和灵活性,它被广泛使用。大多数开发人员选择`Arraylist`而不是数组,因为它是传统 java 数组的一个很好的替代品。`ArrayList`是`List`接口的可调整大小的数组实现。它实现了所有可选的列表操作,并允许所有元素,包括`null`。 ![Java ArrayList](https://img.kancloud.cn/0b/20/0b20c4c91c21f4c71811463ea2daa09e_650x300.jpg) ## 为什么`ArrayList`比数组好? 数组的限制是它有一个固定的长度,所以如果它已满,你不能再添加任何元素,同样如果有多个元素被删除,内存消耗将与它不收缩相同。 另一个`ArrayList`可以在添加和删除元素后动态增长和缩小(参见下图)。除了这些好处之外,`ArrayList`类还允许我们使用它的预定义方法,这使我们的任务变得简单。让我们看一下图表来理解从`ArrayList`中添加和删除元素,然后我们将看到这些程序。 **在指定位置的`ArrayList`中添加元素:** ![Java ArrayList - Adding element](https://img.kancloud.cn/e4/73/e4735de4fe6b459a20a06ed2830ca361_650x350.jpg) **从`ArrayList`中删除元素:** ![ArrayList in Java - Removing Element](https://img.kancloud.cn/47/15/471581d940de5cddd70d0ac195dab6ed_650x326.jpg) > 本指南末尾有一些关于`ArrayList`的教程列表,请参考它以完全理解和学习`ArrayList`概念。 ## 如何创建`ArrayList`? 我们可以通过编写一个这样的简单语句来创建一个`ArrayList`: 此语句创建一个名为`alist`且类型为`String`的`ArrayList`。该类型确定列表将具有哪种类型的元素。由于此列表是`String`类型,因此要添加到此列表的元素将为`String`类型。 ```java ArrayList<String> alist=new ArrayList<String>(); ``` 类似地,我们可以创建接受`int`元素的`ArrayList`。 ```java ArrayList<Integer> list=new ArrayList<Integer>(); ``` ## 如何将元素添加到`ArrayList`? 我们使用`add()`方法向`ArrayList`添加元素,这种方法有几种变体,我们可以根据需要使用它们。例如:如果我们想在`List`的末尾添加元素,那么就这样做: ```java alist.add("Steve"); //This will add "Steve" at the end of List ``` 要在`ArrayList`中的指定位置添加元素,我们可以在`add`方法中指定索引,如下所示: ```java alist.add(3, "Steve"); //This will add "Steve" at the fourth position ``` 让我们写完整的代码: ```java import java.util.*; class JavaExample{ public static void main(String args[]){ ArrayList<String> alist=new ArrayList<String>(); alist.add("Steve"); alist.add("Tim"); alist.add("Lucy"); alist.add("Pat"); alist.add("Angela"); alist.add("Tom"); //displaying elements System.out.println(alist); //Adding "Steve" at the fourth position alist.add(3, "Steve"); //displaying elements System.out.println(alist); } } ``` **输出:** ```java [Steve, Tim, Lucy, Pat, Angela, Tom] [Steve, Tim, Lucy, Steve, Pat, Angela, Tom] ``` **注意:**由于索引从 0 开始,索引 3 将代表第四个位置而不是 3。 ## 如何从`ArrayList`中删除元素? 我们使用`remove()`方法从`ArrayList`中删除元素,与`add()`方法相同,此方法也有一些变化。 例如: ```java import java.util.*; class JavaExample{ public static void main(String args[]){ ArrayList<String> alist=new ArrayList<String>(); alist.add("Steve"); alist.add("Tim"); alist.add("Lucy"); alist.add("Pat"); alist.add("Angela"); alist.add("Tom"); //displaying elements System.out.println(alist); //Removing "Steve" and "Angela" alist.remove("Steve"); alist.remove("Angela"); //displaying elements System.out.println(alist); //Removing 3rd element alist.remove(2); //displaying elements System.out.println(alist); } } ``` **输出:** ```java [Steve, Tim, Lucy, Pat, Angela, Tom] [Tim, Lucy, Pat, Tom] [Tim, Lucy, Tom] ``` ## 迭代`ArrayList` 在上面的例子中,我们只是通过引用`ArrayList`实例来显示`ArrayList`元素,这绝对不是显示元素的正确方法。显示元素的正确方法是使用像这样的高级`for`循环。 ```java import java.util.*; class JavaExample{ public static void main(String args[]){ ArrayList<String> alist=new ArrayList<String>(); alist.add("Gregor Clegane"); alist.add("Khal Drogo"); alist.add("Cersei Lannister"); alist.add("Sandor Clegane"); alist.add("Tyrion Lannister"); //iterating ArrayList for(String str:alist) System.out.println(str); } } ``` **输出:** ```java Gregor Clegane Khal Drogo Cersei Lannister Sandor Clegane Tyrion Lannister ``` ## Java 中的`ArrayList`示例 此示例演示如何从`ArrayList`创建,初始化,添加和删除元素。在这个例子中,我们有一个类型为`String`的`ArrayList`。我们使用`add(String E)`方法在`ArrayList`中添加了 5 个`String`元素,此方法在`ArrayList`的末尾添加了元素。 然后我们使用方法`add(int index,String E)`在`ArrayList`中添加另外两个元素,此方法在指定的索引处添加指定的元素,索引 0 表示第一个位置,1 表示第二个位置。 然后我们从`ArrayList`中删除元素`"Chaitanya"`和`"Harry"`,然后我们使用方法`remove(int index)`删除`ArrayList`的第二个元素。由于我们已将索引指定为 1(`remove(1)`),因此它将删除第二个元素。 ```java import java.util.*; public class JavaExample { public static void main(String args[]) { /* Creating ArrayList of type "String" which means * we can only add "String" elements */ ArrayList<String> obj = new ArrayList<String>(); /*This is how we add elements to an ArrayList*/ obj.add("Ajeet"); obj.add("Harry"); obj.add("Chaitanya"); obj.add("Steve"); obj.add("Anuj"); // Displaying elements System.out.println("Original ArrayList:"); for(String str:obj) System.out.println(str); /* Add element at the given index * obj.add(0, "Rahul") - Adding element "Rahul" at first position * obj.add(1, "Justin") - Adding element "Justin" at second position */ obj.add(0, "Rahul"); obj.add(1, "Justin"); // Displaying elements System.out.println("ArrayList after add operation:"); for(String str:obj) System.out.println(str); //Remove elements from ArrayList like this obj.remove("Chaitanya"); //Removes "Chaitanya" from ArrayList obj.remove("Harry"); //Removes "Harry" from ArrayList // Displaying elements System.out.println("ArrayList after remove operation:"); for(String str:obj) System.out.println(str); //Remove element from the specified index obj.remove(1); //Removes Second element from the List // Displaying elements System.out.println("Final ArrayList:"); for(String str:obj) System.out.println(str); } } 输出: ``` ```java Original ArrayList: Ajeet Harry Chaitanya Steve Anuj ArrayList after add operation: Rahul Justin Ajeet Harry Chaitanya Steve Anuj ArrayList after remove operation: Rahul Justin Ajeet Steve Anuj Final ArrayList: Rahul Ajeet Steve Anuj ``` ## `ArrayList`类的方法 在上面的例子中,我们使用了`add()`和`remove()`等方法。但是有许多方法可以直接使用`ArrayList`类的对象。我们来讨论一下`ArrayList`类的几个重要方法。 1)`add(Object o)`:此方法向`arraylist`添加一个对象`o`。 ```java obj.add("hello"); ``` 这个语句会在最后一个位置的`arraylist`中添加一个字符串`hello`。 2) `add(int index, Object o)`:它将对象`o`添加到给定索引处的`ArrayList`中。 ```java obj.add(2, "bye"); ``` 它将字符串再见添加到`ArrayList`的第二个索引(`ArrayList`以索引 0 开头的第三个位置)。 3)`remove(Object o)`:从`ArrayList`中删除对象`o`。 ```java obj.remove("Chaitanya"); ``` 该语句将从`ArrayList`中删除字符串`"Chaitanya"`。 4)`remove(int index)`:从给定索引中删除元素。 ```java obj.remove(3); ``` 它将删除索引 3 的元素(列表的第 4 个元素 - 列表以 0 开头)。 5)`set(int index, Object o)`:用于更新元素。它用对象`o`替换指定索引处的元素。 ```java obj.set(2, "Tom"); ``` 它将使用值`Tom`替换第 3 个元素(`index = 2`是第 3 个元素)。 6)`int indexOf(Object o)`:给出对象`o`的索引。如果在列表中找不到该元素,则此方法返回值 -1。 ```java int pos = obj.indexOf("Tom"); ``` 这将给出列表中字符串`Tom`的索引​​(位置)。 7)`Object get(int index)`:返回列表对象,该对象出现在指定的索引处。 ```java String str= obj.get(2); ``` 函数`get`将返回存储在第 3 个位置(索引 2)的字符串,并将分配给字符串`"str"`。我们已将返回的值存储在字符串变量中,因为在我们的示例中,我们已经定义了`ArrayList`是`String`类型。如果您有整数`ArrayList`,则返回的值应存储在整数变量中。 8)`int size()`:它给出了`ArrayList`的大小 - 列表元素的数量。 ```java int numberofitems = obj.size(); ``` 9)`boolean contains(Object o)`:它检查给定对象`o`是否存在于`ArrayList`中,如果它在那里则返回`true`,否则返回`false`。 ```java obj.contains("Steve"); ``` 如果字符串`"Steve"`出现在列表中,它将返回`true`,否则我们将得到`false`。 10)`clear()`:**它用于一次性删除`ArrayList`的所有元素。下面的代码将删除其对象为`obj`的`ArrayList`的所有元素。 ```java obj.clear(); ``` ## Java `ArrayList`教程 以下是 beginnersbook.com 上发布的`ArrayList`教程列表。 #### `ArrayList`基础知识 * [初始化`ArrayList`](https://beginnersbook.com/2013/12/how-to-initialize-an-arraylist/) * [遍历`ArrayList`](https://beginnersbook.com/2013/12/how-to-loop-arraylist-in-java/) * [查找`ArrayList`的长度](https://beginnersbook.com/2013/12/how-to-find-length-of-arraylist-in-java/) #### 排序 * [排序`ArrayList`](https://beginnersbook.com/2013/12/how-to-sort-arraylist-in-java/) * [按降序排序`ArrayList`](https://beginnersbook.com/2013/12/sort-arraylist-in-descending-order-in-java/) * [使用`Comparable`和`Comparator`排序`ArrayList`的对象](https://beginnersbook.com/2013/12/java-arraylist-of-object-sort-example-comparable-and-comparator/) #### 添加/删除 * [将元素添加到`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist-add-method-example/) * [在`ArrayList`的特定索引处添加元素](https://beginnersbook.com/2013/12/java-arraylist-addint-index-e-element-example/) * [将`Collection`元素追加到`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist-addallcollection-c-method-example/) * [将所有列表元素复制到`ArrayList`](https://beginnersbook.com/2013/12/how-to-copy-and-add-all-list-elements-to-arraylist-in-java/) * [将所有集合元素插入`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist-addall-int-index-collection-c-method-example/) 中的指定位置 * [从`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist-remove-method-example/) 中的指定索引中删除元素 * [从`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist-removeobject-method-example/) 中删除指定的元素 #### 获取/搜索 * [获取`ArrayList`的子列表](https://beginnersbook.com/2013/12/how-to-get-sublist-of-an-arraylist-with-example/) * [获取`ArrayList`中元素的最后一次出现的索引](https://beginnersbook.com/2013/12/java-arraylist-lastindexofobject-0bj-method-example/) * [从`ArrayList`获取元素](https://beginnersbook.com/2013/12/java-arraylist-get-method-example/) * [获取`ArrayList`中元素第一次出现的索引](https://beginnersbook.com/2013/12/java-arraylist-indexof-method-example/) * [检查`ArrayList`中是否存在元素](https://beginnersbook.com/2013/12/java-arraylist-contains-method-example/) #### 关于`ArrayList`的其他教程 * [比较两个`ArrayList`](https://beginnersbook.com/2013/12/how-to-compare-two-arraylist-in-java/) * [同步`ArrayList`](https://beginnersbook.com/2013/12/how-to-synchronize-arraylist-in-java-with-example/) * [在`ArrayList`中交换两个元素](https://beginnersbook.com/2013/12/how-to-swap-two-elements-in-an-arraylist/) * [覆盖`toString()`方法 - `ArrayList`](https://beginnersbook.com/2013/12/how-to-override-tostring-method-for-arraylist-in-java/) * [序列化`ArrayList`](https://beginnersbook.com/2013/12/how-to-serialize-arraylist-in-java/) * [连接两个`ArrayList`](https://beginnersbook.com/2013/12/how-to-joincombine-two-arraylists-in-java/) * [克隆`ArrayList`到另一个`ArrayList`](https://beginnersbook.com/2013/12/how-to-clone-an-arraylist-to-another-arraylist/) * [使`ArrayList`为空](https://beginnersbook.com/2013/12/how-to-empty-an-arraylist-in-java/) * [检查`ArrayList`是否为空](https://beginnersbook.com/2013/12/java-arraylist-isempty-method-example/) * [修剪`ArrayList`的大小](https://beginnersbook.com/2013/12/java-arraylist-trimtosize-method-example/) * [替换`ArrayList`中现有元素的值](https://beginnersbook.com/2013/12/java-arraylist-set-method-example/) * [增加`ArrayList`的容量(大小)](https://beginnersbook.com/2013/12/java-arraylist-ensurecapacity-method-example/) #### 转换: * [将`LinkedList`转换为`ArrayList`](https://beginnersbook.com/2014/07/java-convert-a-linkedlist-to-arraylist/) * [将`Vector`转换为`ArrayList`](https://beginnersbook.com/2014/07/java-convert-vector-to-arraylist-example/) * [将`ArrayList`转换为字符串数组](https://beginnersbook.com/2013/12/how-to-convert-arraylist-to-string-array-in-java/) * [将数组转换为`ArrayList`](https://beginnersbook.com/2013/12/how-to-convert-array-to-arraylist-in-java/) * [将`HashSet`转换为`ArrayList`](https://beginnersbook.com/2014/08/convert-hashset-to-a-list-arraylist/) #### 区别: * [`ArrayList` vs `Vector`](https://beginnersbook.com/2013/12/difference-between-arraylist-and-vector-in-java/) * [`ArrayList` vs `HashMap`](https://beginnersbook.com/2013/12/difference-between-arraylist-and-hashmap-in-java/) * [`ArrayList` vs `LinkedList`](https://beginnersbook.com/2013/12/difference-between-arraylist-and-linkedlist-in-java/) #### 参考 * [`ArrayList`文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)