本文通过实例讲解Java中如何使用 ArrayList 类。
Java.util.ArrayList 类是一个动态数组类型,也就是说,ArrayList 对象既有数组的特征,也有链表的特征。可以随时从链表中添加或删除一个元素。ArrayList 实现了 List 接口。
大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList 是可以动态改变大小的。那么,什么时候使用 Array(数组),什么时候使用 ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用 ArrayList;如果知道数据集合有多少个元素,就用数组。
1.ArrayList 构造函数
ArrayList 类支持 3 个构造方法。
Arraylist()
这个构造方法构造了一个空的链表。
ArrayList(Collection<? extends E> c)
这个构造方法构造了一个包含指定元素集合的链表,注意,这里的字符 E 是一个标记,用来表示集合中元素的类型。至于具体是什么类型,需要你在使用这个构造方法的时候来指定。
ArrayList(int initialCapacity)
这是第三个构造方法,构造了一个指定大小但内容为空的链表。initialCapacity 参数就是初始容量大小。
举例来说,如果你要创建一个空的数组链表,用来存放 String 类型的对象,那么你可以像下面这样做:
ArrayList<String> list = new ArrayList<String>();
如果你需要创建一个指定初始容量的数组链表,你可以像下面这样做:
ArrayList<Integer> list = new ArrayList<Integer>(7);
注意:ArrayList 类只支持对象类型,不支持 基础数据类型。就是说 ArrayList 对象只能存放对象,不能存放基础数据类型的数据。
2.ArrayList 常用方法
下面是总结了一些比较常用的 ArrayList 类成员方法:
- 增加元素到链表中
boolean add(Element e)
增加指定元素到链表尾部.
void add(int index, Element e)
增加指定元素到链表指定位置.
- 从链表中删除元素
void clear()
从链表中删除所有元素.
E remove(int index)
删除链表中指定位置的元素.
protected void removeRange(int start, int end)
删除链表中从某一个位置开始到某一个位置结束的元素。
- 获取链表中的元素
E get(int index)
获取链表中指定位置处的元素.
Object[] toArray()
获取一个数组,数组中所有元素是链表中的元素.(即将链表转换为一个数组)
- 修改某个元素
E set(int index, E element)
将链表中指定位置上的元素替换成新元素。
- 搜索元素
boolean contains(Object o)
如果链表包含指定元素,返回 true.
int indexOf(Object o)
返回元素在链表中第一次出现的位置,如果返回-1,表示链表中没有这个元素。
int lastIndexOf(Object o)
返回元素在链表中最后一次出现的位置,如果返回-1,表示链表中没有这个元素。
- 检查链表是否为空
boolean isEmpty()
返回 true 表示链表中没有任何元素.
- 获取链表大小
int size()
返回链表长度(链表包含元素的个数).
以上是 ArrayList 类中使用比较多的成员方法。每个方法的更详细的说明或其它没有提及到的方法,读者可以参考 java 官方 api
3.ArrayList 使用实例
- package com.liuyanzhao;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Iterator;
- public class ArrayListDemo {
- public static void main(String[] args) {
- //1.创建一个空的数组链表对象,list 用来存 int 类型数据
- ArrayList<String> list = new ArrayList<String>();
- list.add(“刘䶮曌”);
- list.add(“刘言曌”);
- list.add(“liuyanzhao”);
- list.add(2,“Yanzh”);
- //显示链表内容
- System.out.println(list);//[刘䶮曌, 刘言曌, Yanzh, liuyanzhao]
- //2.检查元素位置
- int pos = list.indexOf(3);
- System.out.println(pos);//-1
- //3.检查数组链表是否为空
- boolean check = list.isEmpty();
- System.out.println(check);//false
- //4.获取链表大小
- int size = list.size();
- System.out.println(size);//4
- //5.检查链表中是否包含某元素
- boolean element = list.contains(“刘言曌”);
- System.out.println(element);//true
- //6.获取指定位置上的元素
- String item = list.get(0);
- System.out.println(item);//刘䶮曌
- //7.遍历 arraylist 中的元素
- //第一种方法:使用元素的索引来遍历,get()和 size()
- for(int i=0;i<list.size();i++) {
- System.out.print(list.get(i)+” “);//刘䶮曌 刘言曌 Yanzh liuyanzhao
- }
- System.out.println();
- //第二种方法:使用 foreach 循环
- for(String s:list) {
- System.out.print(s+” “);//刘䶮曌 刘言曌 Yanzh liuyanzhao
- }
- System.out.println();
- //第三种方法:使用迭代器
- //hasNext():表示链表中还有元素
- //next():返回下一个元素
- for(Iterator<String> it = list.iterator();it.hasNext();) {
- System.out.printf(it.next()+” “);//刘䶮曌 刘言曌 Yanzh liuyanzhao
- }
- System.out.println();
- //8.替换元素
- list.set(1, “刘德华”);
- System.out.println(list);//[刘䶮曌, 刘德华, Yanzh, liuyanzhao]
- //9.移除指定位置的元素
- list.remove(1);
- System.out.println(list);//[刘䶮曌, Yanzh, liuyanzhao]
- //10.移除首次出现的某元素
- list.remove(“Yanzh”);
- System.out.println(list); //[刘䶮曌, liuyanzhao]
- //11.转换 ArrayList 为 Array
- String arr[] = list.toArray(new String[list.size()]);
- System.out.println(Arrays.toString(arr));//[刘䶮曌, liuyanzhao]
- //12.移除所有元素
- list.clear();//移除所有元素
- System.out.println(list);//[]
- }
- }