如何在 Java 中使用 ArrayList?10个 ArrayList 的 示例
Java中的 ArrayList
是继 HashMap 之后使用频率最高的集合类。 Java ArrayList 表示一个自动调整大小的数组并用于代替数组。 由于我们不能在创建数组后修改它的大小,所以我们更喜欢在 Java 中使用 ArrayList,它会在数组变满后自动调整自身大小。 Java中的 ArrayList 实现了 List
接口,允许为 null。 Java ArrayList 还维护元素的插入顺序并允许重复,这与任何不允许重复的 Set 实现相反。 ArrayList 支持 Iterator
和 ListIterator
进行迭代,但推荐使用 ListIterator
,因为它允许程序员向任一方向遍历列表,在迭代过程中修改列表,并获取 Iterator
在列表中的当前位置。
但是在使用 ListIterator
时需要小心一点,因为 ListIterator
没有当前元素; 它的光标位置总是位于调用 previous()
返回的元素和调用 next()
返回的元素之间。
在本 Java ArrayList 文章中,我们将了解如何创建 Java ArrayList 以及如何对 Java ArrayList 执行各种操作。 这个集合类在许多核心 Java 面试中也很受欢迎,这些面试的问题包括 ArrayList 和 Vector 之间的区别或 LinkedList 与 ArrayList 之间的区别。
ArrayList 在 Java 5 (Tiger) 中进行了修改以支持泛型,这使得 Java ArrayList 由于增强了类型安全性而更加强大。
在 Java5 之前,因为没有泛型,所以在编译时没有类型检查,这意味着有可能将不同类型的元素存储在 ArrayList 中,这意味着某些东西并最终在运行时导致 ClassCastException
。
使用泛型,我们可以创建 Java ArrayList,它只接受在创建期间指定的对象类型,如果有人试图将任何其他对象插入 Java 中的 ArrayList
,则会导致编译错误; 例如,如果我们创建一个字符串对象的 ArrayList,则不能在其上存储 Integer,因为 ArrayList 的 add()
方法将在将对象添加到 Java 中的 ArrayList 之前检查类型,这与 Java 1.4 的 add()
方法相反,它接受任何对象。
JDK 1.5 中带有泛型的 Java ArrayList
同样重要的是要记住 ArrayList
不是同步的,不应该在多个线程之间共享。 如果多个线程同时访问一个 Java ArrayList 实例,并且至少有一个线程在结构上修改了列表,则它必须在外部进行同步。
根据 Java 文档,结构修改是添加或删除一个或多个元素或显式调整支持数组大小的任何操作; 仅仅设置元素的值不是结构修改。
这通常是通过同步一些自然封装列表的对象来实现的。 如果不存在这样的对象,则应使用 Collections.synchronizedList()
方法“包装”列表。
建议在创建时同步列表,以避免任何意外的非同步访问列表。 另一个更好的选择是使用从 Java 5 添加并针对多个并发读取进行了优化的
CopyOnWriteArrayList
。
在 CopyOnWriteArrayList
中,所有可变操作(添加、设置等)都是通过制作底层数组的新副本来实现的,这就是它在 Java 中被称为“CopyOnWrite”ArrayList 的原因。
Java 中 ArrayList 的 10 个示例
让我们看一些在 Java 中创建和使用 ArrayList 的例子,我试图提供尽可能多的例子来说明 Java ArrayList 上可能的不同操作。 如果大家需要任何其他 Java ArrayList 示例,请告诉我,我将在此篇文章中添加它们。
1.如何在Java中创建一个ArrayList?
我们可以在 Java 中使用带有或不带有泛型的 ArrayList,两者都被泛型所允许,因为增强了类型安全性,建议使用此版本。 在这个例子中,我们将在 Java 中创建一个 String
的 ArrayList。 这个 Java ArrayList 将只允许使用 String
,如果我们尝试使用除 String 之外的任何其他对象,将会抛出编译错误。
如果你注意到你需要在表达式的左右两侧指定类型,从 Java 1.7 开始,如果你使用菱形运算符,尖括号,你只需要在左侧指定。 如果我们正在定义嵌套类型的 ArrayList,这可以节省大量空间。
ArrayList<String> stringList = new ArrayList<String> ;
ArrayList<String> stringList = new ArrayList<>();
2. Java中如何给ArrayList添加一个元素?
我们可以通过调用 add()
方法向 ArrayList 添加元素。 由于我们使用的是泛型,并且这是一个 String
的 ArrayList,因此第二行将导致编译错误,因为此 Java ArrayList 将只允许 String
元素。
stringList.add("Item"); //没有错误,因为我们正在存储字符串
stringList.add(new Integer(2)); //编译错误
3. Java中如何求ArrayList的大小?
Java 中 ArrayList 的大小是 ArrayList 当前存储的元素总数。我们可以通过调用 ArrayList 中的 size()
方法轻松地找到许多元素。 请记住,这可能与支持 ArrayList 的数组的长度不同。 实际上,支持数组的长度总是大于 ArrayList 的大小,以便它可以存储更多元素。
int size = stringList.size();
4. 如何在 Java ArrayList 中查找元素的索引
我们可以使用 Java 中 ArrayList 的 indexOf()
方法来查找特定对象的索引。 当我们使用此方法时,ArrayList 在内部使用 equals()
方法来查找对象,因此请确保我们的元素实现了 equals()
和 hashCode()
,否则将使用 Object 类的默认实现,它根据内存位置比较对象。
int index = stringList.indexOf("Item"); //Item 对象在 List 中的位置
5. 如何在循环中从 ArrayList 中获取一个元素? 例子
很多时候我们需要在 Java ArrayList 上遍历,对每一个检索到的项进行一些操作。 这里有两种不使用迭代器的方法。 我们将在下一节中看到迭代器的使用。
for(int i=0;i<stringList.size();i++) {
String item=stringList.get(i);
System.out.println("Item "+i+" : "+item);
}
// 从 Java5 开始,也可以使用 foreach 循环
for(String item:stringList) {
System.out.println("retrieved element: "+item);
}
6.如何在ArrayList中查找?
有时我们需要检查一个元素是否存在于 Java 的 ArrayList 中,为此我们可以使用 Java 的 contains()
方法。 contains()
方法采用在 ArrayList 创建中定义的对象类型,如果此列表包含指定元素,则返回 true。
或者,我们也可以使用 Collections.binarySearch()
方法来查看对象是否存在于 List 中。 ArrayList 、Vector 、CopyOnWriteArrayList 和 Stack 实现了 RandomAccess
接口,它们可用于执行二进制搜索。
7. Java中如何判断ArrayList是否为空?
我们可以使用 Java ArrayList 的 isEmpty()
方法来检查 ArrayList 是否为空。 如果此 ArrayList 不包含任何元素,isEmpty()
方法将返回 true。 我们还可以使用列表的 size()
方法来检查列表是否为空。 如果返回的大小为零,则 ArrayList 为空。
boolean result = stringList.isEmpty(); //如果 List 为空,isEmpty() 将返回 true
if(stringList.size() == 0){
System.out.println("ArrayList is empty");
}
8. 如何从 Java 中的 ArrayList 中删除一个元素?
在 Java 中有两种方法可以从 ArrayList 中删除任何元素。 我们可以根据索引删除元素,也可以通过提供对象本身来删除元素。 Remove remove(int index)
和 remove(Object o)
方法用于从 Java 中的 ArrayList 中删除任何元素。
由于 ArrayList 允许重复,因此值得注意的是 remove(Object o)
从该列表中删除指定元素的第一个匹配项(如果存在)。 在下面的代码中,第一次调用将从 ArrayList 中删除第一个元素,而第二次调用将从 Java 中的 ArrayList 中删除第一次出现的项目。
stringList.remove(0);
stringList.remove(item);
9. 如何在 Java 中将数据从一个 ArrayList 复制到另一个?
很多时候我们需要为此目的创建 ArrayList 的副本,我们可以使用 Java 中 ArrayList 的 addAll(Collection c)
方法将所有元素从一个 ArrayList 复制到另一个 ArrayList 中。 下面的代码会将 stringList 的所有元素添加到新创建的 copyOfStringList
中。
ArrayList<String> copyOfStringList = new ArrayList<String>();
copyOfStringList.addAll(stringList);
10. 如何替换 ArrayList 中特定索引处的元素?
我们可以使用 java ArrayList 的 set(int index, E element)
方法来替换特定索引中的任何元素。 下面的代码会将 stringList
的第一个元素从“Item”替换为“Item2”。
stringList.set(0,"Item2");
什么时候在 Java 中使用 ArrayList?
现在,大家知道什么是 ArrayList、这个类的不同方法以及它是如何工作的。 现在是学习何时在 Java 中使用 ArrayList 的时候了。 对于 Java 程序员,了解 Collection
类非常重要,同样重要的是培养一种能力来决定在特定场景中使用哪个集合。
大多数时候,有两个因素会影响大家的决策、性能和功能。 ArrayList 是一种基于索引的数据结构,这意味着如果我们知道索引,它可以提供 O(1)
的搜索性能,类似地,在最好的情况下,将一个元素添加到 ArrayList 中也是 O(1)
的性能,但是如果添加触发列表的大小调整,则 它将处于 O(n)
级别,因为将花费大量时间将旧列表的元素复制到新 ArrayList 中。
回到功能上,如果我们对重复元素没问题,那么只使用这个集合类。 它不是线程安全的,所以不要在并发环境中使用它。
这就是关于 Java 中的 ArrayList 示例的全部内容。 我们已经看到了几个在 Java 中使用 ArrayList 的例子,也看到了一些处理 ArrayList 的有用技巧。 我们还了解了何时使用 ArrayList,这对每个 Java 程序员都非常重要。 现在,我们已准备好在 Java 中使用 ArrayList。
相关文章
在 Java 中获取文件大小
发布时间:2023/05/01 浏览次数:139 分类:Java
-
Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。
Java 中的文件分隔符
发布时间:2023/05/01 浏览次数:108 分类:Java
-
本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。
Java 中的文件过滤器
发布时间:2023/05/01 浏览次数:193 分类:Java
-
本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。
Java 获取 ISO 8601 格式的当前时间戳
发布时间:2023/05/01 浏览次数:132 分类:Java
-
本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。
在 Java 中获取数组的子集
发布时间:2023/05/01 浏览次数:142 分类:Java
-
本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集
用 Java 填充二维数组
发布时间:2023/05/01 浏览次数:110 分类:Java
-
二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
Java 中 List 和 Arraylist 的区别
发布时间:2023/05/01 浏览次数:90 分类:Java
-
表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵