目录
一、ArrayList是什么
二、ArrayList的使用
(1)导包
(2)ArrayList的构造方法
三、ArrayList的常用方法
(1)添加元素
(2)删除元素
(3)获取元素
(4)获取元素下标
(5)修改元素
(6)判断元素是否在线性表中
(7)清空
(8)截取部分list
四、ArrayList的遍历
(1)for循环
(2)foreach
(3)迭代器
一、ArrayList是什么
ArrayList类是一个可以动态修改的数组,不同于普通数组,它没有固定的大小限制,可以添加或删除元素,继承于 AbstractList 类,实现了List接口。
注:ArrayList是以泛型方式实现的,使用时必须先实例化
二、ArrayList的使用
(1)导包
ArrayList类位于 java.util 包中,使用前需要导包
import java.util.ArrayList;
(2)ArrayList的构造方法
ArrayList()
无参构造方法,在调用该构造方法时,会构造一个空的线性表
ArrayList<Integer> arrayList = new ArrayList<>();
ArrayList(Collection<? extends E> c)
利用其他Collection构建ArrayList
?是通配符,?extends E :接收的类型为E类型或是E的子类
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);ArrayList<Number> arrayList1 = new ArrayList<>(arrayList);}
}
ArrayList(int initialCapacity)
指定顺序表初始容量大小为 initialCapacity
//构造一个具有5个容量的列表
ArrayList<String> arrayList1 = new ArrayList<>(5);
当传入的参数小于0时,会抛出异常 IllegalArgumentException(创建的顺序表容量大小不能为负)
三、ArrayList的常用方法
(1)添加元素
ArrayList可以使用add()方法来添加元素
boolean add(E e) //在线性表尾添加元素e,添加成功返回true,失败返回false
void add(int index, E e) //在index位置插入元素e
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>(3);arrayList.add(3);arrayList.add(4);arrayList.add(0,1);System.out.println(arrayList);//输出结果:[1,3,4]}
}
(2)删除元素
E remove(int index) //删除 index 位置的元素,并返回 index 位置的元素
boolean remove(Object o) //删除第一个元素o,删除成功返回true,删除失败,返回false
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>(3);arrayList.add(3);arrayList.add(4);arrayList.add(4);arrayList.add(0,1);System.out.println(arrayList);//输出结果:[1,3,4,4]System.out.println(arrayList.remove(0));//输出结果:1Integer integer = 4;System.out.println(arrayList.remove(integer));//输出结果:trueinteger = 5;System.out.println(arrayList.remove(integer));//输出结果:falseSystem.out.println(arrayList);//输出结果:[3,4]}
}
(3)获取元素
E get(int index) //获取下标为 index 位置的元素
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>(3);arrayList.add(3);arrayList.add(4);arrayList.add(5);arrayList.add(0,1);Integer integer = arrayList.get(2);System.out.println(integer);//输出结果为5}
}
arrayList中有n个元素,index的取值应在 [0,n) 之间,否则,抛出 IndexOutOfBoundsException 索引越界异常
(4)获取元素下标
int indexOf(Object o) //返回第一个o所在下标,o不存在于列表中则返回-1
int lastIndexOf(Object o) //返回最后一个o的下标,o不存在于列表中则返回-1
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);Integer integer = 4;System.out.println(arrayList.indexOf(integer));//输出结果:1System.out.println(arrayList.lastIndexOf(integer));//输出结果:2integer = 0;System.out.println(arrayList.indexOf(integer));//输出结果:-1}
}
(5)修改元素
E set(int index, E e) //将下标为 index 位置的元素修改为 e,并返回 index 位置原来的元素
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);Integer integer = arrayList.set(0,2);System.out.println(integer);//输出结果为3}
}
(6)判断元素是否在线性表中
boolean contains(Object o) //判断o是否在线性表中,在,返回true;不在,返回 false
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);Integer integer = 4;System.out.println(arrayList.contains(integer));//输出结果:trueinteger = 0;System.out.println(arrayList.contains(integer));//输出结果:false}
}
(7)清空
void clear() //清空线性表
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);arrayList.clear();System.out.println(arrayList);//输出结果:[]}
}
(8)截取部分list
List<E> subList(int fromIndex, int toIndex) //截取集合中[fromIndex, toIndex)区间的元素
subList是List接口中定义的一个方法,用于返回集合中的一段,即从 fromIndex (包含该位置元素)位置,到 toIndex (不包含该位置元素)位置的元素,方法的返回值类型是List,且用ArrayList接收,否则会抛出 ClassCastException 异常。
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);List<Integer> list = arrayList.subList(0,2);System.out.println(list);//输出结果:[3,4]}
}
若要用ArrayList接收方法的返回值,可以对其进行强制类型转换
四、ArrayList的遍历
ArrayList可以使用三种方式进行遍历,分别是 for循环、foreach 和 迭代器
(1)for循环
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);arrayList.add(5);for (int i = 0; i < arrayList.size(); i++) {System.out.print(arrayList.get(i) + " ");}}
}
(2)foreach
foreach中第一个参数是数组元素或集合元素的类型,i是形参名, 第二个参数是数组或集合,foreach自动将数组或集合元素依次赋值给变量i,当每个元素都被迭代一次后,foreach自动结束循环
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);arrayList.add(5);for (Integer i: arrayList) {System.out.print(i + " ");}}
}
(3)迭代器
Iterator对象称为迭代器,用于遍历集合中的元素,实现了Collection接口的集合类都有一个 iterator() 方法,用于返回一个实现了Iterator接口的对象
Iterator接口的方法:
hasNext():是否有下一个元素,有则返回true;没有则返回false
next():返回迭代的下一个元素
public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(3);arrayList.add(4);arrayList.add(4);arrayList.add(5);Iterator<Integer> iterator = arrayList.iterator();while (iterator.hasNext()){System.out.print(iterator.next() + " ");}}
}