本文仅供学习参考!
相关文章地址:
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
https://www.w3schools.com/java/java_arraylist.asp
https://www.runoob.com/java/java-arraylist.html
Java ArrayList 基础知识
ArrayList是 Java 集合框架的一部分,位于java.util包中。它实现了List接口,提供动态调整大小的功能。虽然比标准数组慢一点,但ArrayList提供了许多标准数组中找不到的功能。
如何在 Java 中创建 ArrayList
要创建ArrayList,请务必先导入java.util.ArrayList包。然后,您需要做的就是调用它的构造函数:
import java.util.ArrayList;
ArrayList<String> guitars = new ArrayList<String>();
ArrayList支持泛型,这有助于增强类型安全性。程序员可以创建任何类型的ArrayList,从简单类型(如Integer、String和Double )到复杂类型(如HashMap或任何用户定义的对象)。
在 Java 中添加和删除 ArrayList 中的项目
您可以使用**add(obj)**方法向 ArrayList添加值,该方法会将对象添加到列表的末尾。同时,**add(index,obj)**方法在传递的索引处添加对象,但首先将任何现有值移动到更高的索引,以便为新对象腾出空间。请注意,与常规数组一样,索引是从零开始的。
您还可以使用remove(index)从ArrayList中删除值,这会从列表中删除给定索引处的项目。这会将基础数组中的所有其他项目移动一个序数位置,并将ArrayList的大小减少1 。
以下程序通过向新的ArrayList添加一些吉他(包括位于特定索引处的吉他)来展示添加和删除方法。然后删除列表中的第一项:
import java.util.ArrayList;
ArrayList<String> guitars = new ArrayList<String>();
guitars.add("Fender");
guitars.add("Gibson");
guitars.add("Jackson");
System.out.println(guitars);
// 在第二个位置插入新项目
guitars.add(1, "Washburn");
System.out.println(guitars);
// 删除第一个元素
guitars.remove(0);
System.out.println(guitars);
我们可以在下面看到完整的程序输出:
Java ArrayList 的获取和设置方法
一旦您在ArrayList中获得了一些项目,开发人员就会想要访问它们以读取或修改它们的值。与数组使用的方括号( array[index] )相反, ArrayList通过方法提供对底层数组的访问。您可以使用 来获取索引处的对象obj = listName.get(index)
,并使用 来设置索引处的对象listName.set(index,obj)
。下面是一个基于前一个示例的 Java 代码示例:
// 打印列表的第三个元素
System.out.println(guitars.get(2));
guitars.set(2, "Yamaha");
// Jackson现在是Yamaha
System.out.println(guitars);
以下是更新后的程序输出,其中两个新的系统输出以红色突出显示:
如何在 Java 中获取 ArrayList 的大小
与具有 length 属性的数组不同,ArrayList提供size()
方法来获取ArrayList中的项目数。因此,我们可以通过调用ArrayList的size()
方法来获取吉他的长度:
guitars.set(2, "Yamaha");
// Jackson is now Yamaha
System.out.println(guitars);
// Prints 3
System.out.println(guitars.size());
在 Java 中对 ArrayList 进行排序
出于显示目的, ArrayList通常需要进行排序,这可以使用**Collections.sort()或ArrayList.sort()**方法轻松完成。
Collections.sort ()方法用于按升序对指定列表的元素进行排序。它与Arrays.sort()方法非常相似,但更通用,因为它可以对数组以及链表、队列和许多其他扩展Collections的类型(包括ArrayList)的元素进行排序。
请记住,**Collections.sort()**会改变原始列表,因此您需要在访问排序列表之前在其自己的行上调用它,如下例所示:
对ArrayList进行排序的另一种方法是使用其自己的实例排序方法。它与Collections.sort()有所不同,因为ArrayList 的 sort()
方法接受比较器方法作为参数(对于Collections.sort()来说它是可选的)。比较器指定ArrayList的排序顺序,对于对自定义对象进行排序特别有用。话虽这么说,比较器对于字符串和整数等简单类型同样有效:
import java.util.ArrayList;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
ArrayList<String> guitars = new ArrayList<>();
guitars.add("Gibson");
guitars.add("Yamaha");
guitars.add("Fender");
guitars.add("Jackson");
System.out.println("guitars before sorting: " + guitars);
// 使用比较器对ArrayList进行排序
guitars.sort(new Comparator<String>() {
@Override
public int compare(String guitar1, String guitar2) {
return guitar1.compareTo(guitar2);
}
});
// 上面的sort()方法也可以使用lambda表达式编写
guitars.sort((guitar1, guitar2) -> guitar1.compareTo(guitar2));
// 一个更简洁的解决方案!
guitars.sort(Comparator.naturalOrder());
System.out.println("guitars after sorting: " + guitars);
}
}
对于这种直接排序来说,使用比较器函数可能有点过分了,但是,正如结果所示,它确实有效:
END
虽然普通数组非常适合保存固定数量的相同类型的值,但如果您需要动态调整大小或认为您可能会从其许多有用的方法中受益,请考虑升级到 ArrayList 。