Java ArrayList列表类的用法(非常详细,附带实例)
在 Java 中,列表类是最常用的一种集合,通常我们会使用 ArrayList 和 LinkedList 两种列表类。
ArrayList 是使用数组结构来实现的一种列表,数组列表中包含了一个动态数组,它用来保存元素。动态数组的结构看起来与数组很相似,但它的最大优势在于不必关心数组的长度,可以将 ArrayList 看成无限长度的数组。而 LinkedList 不再使用数组作为存储数据的结构,而使用双向链表。
由于这两个类的核心方法相同,唯一不同的地方是存储元素的结构,因此我们以 ArrayList 类为例来讲解列表类的相关操作。
我们可以通过下面三种方式构建 ArrayList 对象:
下面的实例展示了创建 ArrayList 对象的三种方式:
此外,还可以自行指定初始容量的大小,比如指定为 20,但实际上多数情况下没有必要指定,因为 ArrayList 会根据实际情况自动扩展容量。
两者各有各的优缺点,在实际应用中可以根据场景选择其一。
ArrayList 是使用数组结构来实现的一种列表,数组列表中包含了一个动态数组,它用来保存元素。动态数组的结构看起来与数组很相似,但它的最大优势在于不必关心数组的长度,可以将 ArrayList 看成无限长度的数组。而 LinkedList 不再使用数组作为存储数据的结构,而使用双向链表。
由于这两个类的核心方法相同,唯一不同的地方是存储元素的结构,因此我们以 ArrayList 类为例来讲解列表类的相关操作。
我们可以通过下面三种方式构建 ArrayList 对象:
- 第一种方式创建一个初始容量为 10 的数组列表对象;
- 第二种方式创建一个指定容量大小的数组列表对象;
- 第三种方式创建一个数组列表对象并将指定集合 c 中的元素添加进去。
public ArrayList() public ArrayList(int initialCapacity) public ArrayList(Collection<? extends E> c)
下面的实例展示了创建 ArrayList 对象的三种方式:
public class ArrayListTest { public static void main(String[] args) { ArrayList list1 = new ArrayList(); ArrayList<Integer> list2 = new ArrayList<Integer>(20); ArrayList<String> list3 = new ArrayList<String>(); list3.add("hello"); list3.add("java"); ArrayList<String> list4 = new ArrayList<String>(list3); System.out.println(list4); } }由于 ArrayList 定义了泛型类型,因此我们在创建对象时可以指定一个类型来表示存储在列表中的元素的数据类型,比如 String 或 Integer 类型。当然也可以不指定泛型类型,那么列表中指定的就是默认的 Object 类。
此外,还可以自行指定初始容量的大小,比如指定为 20,但实际上多数情况下没有必要指定,因为 ArrayList 会根据实际情况自动扩展容量。
Java ArrayList添加元素
我们可以通过 add() 方法向 ArrayList 对象中添加元素,操作非常简单。如下面的实例所示,往 list 对象中添加了“中国”“美国”“德国”“英国”和“日本”这 5 个字符串对象。public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); list.add("英国"); list.add("日本"); System.out.println(list); } }输出结果为:
[中国, 美国, 德国, 英国, 日本]
Java ArrayList访问元素
通过 get() 方法可以获取列表中指定位置的元素,代码如下所示:public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); list.add("英国"); list.add("日本"); System.out.println(list.get(0)); System.out.println(list.get(3)); } }输出结果为:
中国
英国
Java ArrayList修改元素
当我们想修改元素值时可以使用 set() 方法,它可以修改指定位置的元素。例如:public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); System.out.println(list); list.set(2, "法国"); System.out.println(list); } }运行结果为:
[中国, 美国, 德国]
[中国, 美国, 法国]
Java ArrayList删除元素
如果想删除列表中的元素,则可以通过 remove() 方法。例如:public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); list.add("英国"); System.out.println(list); list.remove(2); System.out.println(list); } }运行结果为:
[中国, 美国, 德国, 英国]
[中国, 美国, 英国]
Java ArrayList获取列表元素个数
通过 size() 方法可以获取列表中包含的所有元素的个数,例如:public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); list.add("英国"); list.add("日本"); System.out.println(list.size()); } }运行结果为:
5
程序中的列表一共有五个元素,所以输出为 5。Java ArrayList遍历数组列表
我们可以通过多种方式来遍历列表,下面的实例中展示了三种遍历方式:public class ArrayListTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("中国"); list.add("美国"); list.add("德国"); //第一种遍历方式 for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); //第二种遍历方式 for (String s : list) System.out.println(s); //第三种遍历方式 Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }前两种我们都很熟悉了,其实都是用 for 语句实现遍历的基本用法,第三种则是通过迭代器+while 语句来实现遍历,Iterator 表示迭代器。
Java ArrayList与LinkedList
虽然 ArrayList 与 LinkedList 在使用上对于我们来说没什么区别,但两者的性质存在差异,体现在如下几点:- ArrayList 访问速度快于 LinkedList;
- LinkedList 插入和删除的速度快于 ArrayList;
- ArrayList 占用的存储空间比 LinkedList 小。
两者各有各的优缺点,在实际应用中可以根据场景选择其一。