一、ArrayList是什么?
ArrayList是一个可变数组类,实现了collection接口、List接口。每个 ArrayList 实例都有一个容量,在该类的构造方法中有ArrayList(int initialcapacity)就是创建一个指定的initialcapacity大小的数组;构造方法ArrayList()就是创建一个初始大小为10的数组。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。
二、ArrayList的方法
ArrayList类实现了collection接口、List接口,因此具有了collection接口和List接口的方法,collection接口的方法前面已经谈过,可以看我之前发的博客collection接口,这里就省略。接下来我介绍一下ArrayList独有的方法:
- int indexOf(Object o) 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
int num1 = list.indexOf(2);
int num2 = list.indexOf(6);
System.out.println("2的索引num1: "+num1);
System.out.println("6的索引num2: "+num2);
运行结果:
- boolean addAll(Collection<? extends E> c) 按照指定 collection 集合的迭代器所返回的元素顺序,将该 collection 集合中的所有元素添加到此列表的尾部。
注意:该方法的参数Collection<? extends E> c是说明:(1)该参数必须是集合Collection的实例对象,(2)该集合元素的类型必须是与调用该方法集合的类型一致或者是该类型的子类(3)返回值是Boolean值,添加成功为true,否则为false
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("list="+list);
ArrayList<Integer> copyList=new ArrayList<>();
copyList.addAll(list);
System.out.println("添加一次list后copyList="+copyList);
copyList.addAll(list);
System.out.println("添加二次list后copyList="+copyList);
运行结果:
- boolean addAll(int index, Collection<? extends E> c) 从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。
注意:该方法的参数int index和Collection<? extends E> c是说明:(1)该参数必须是集合Collection的实例对象,(2)该集合元素的类型必须是与调用该方法集合的类.(3)参数index是指调用该方法的集合的索引位置开始添加元素,且不会覆盖原来的元素,只是index索引后面的元素被挤到最后去了(4) 返回值是Boolean值,添加成功为true,否则为false
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("list="+list);
ArrayList<Integer> copyList=new ArrayList<>();
copyList.addAll(list);
System.out.println("添加一次list后copyList="+copyList);
copyList.addAll(2,list);
System.out.println("在原copyList中2位置处添加list后copyList="+copyList);
运行结果:
- Object[] toArray() 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
注意:(1)返回的是一个Object类型的数组, (2)理论这个数组的每个元素都只能使用Object类中的方法,无法直接使用集合泛型中类的方法(要使用必须进行强转类型)。
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("list="+list);
Object[] arr = list.toArray();
System.out.println("数组类型为"+arr.getClass());
System.out.print("储存为数组后arr:[");
int i;
for (i = 0; i < arr.length-1; i++) {
System.out.print(arr[i]+", ");
}
System.out.println(arr[i]+"]");
运行结果:
- T[] toArray(T[] a) 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
注意:类型T与调用该方法的集合的泛型一致,参数T[]a是一个数组,调用该方法的集合中的元素最终会保存到a数组中(a数组使用前要进行初始化,底层中如果a数组长度小,就会先将a数组扩充在存放数组),返回值是一个数组(可以用a数组接收,也可以使用其他相同类型的数组接收)。
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("list="+list);
Integer []a=new Integer[2];
Integer[] integer = list.toArray(a);
System.out.print("使用integer数组接收integer:[");
int i1;
for (i1 = 0; i1 < integer.length-1; i1++) {
System.out.print(integer[i1]+" ");
}
System.out.println(integer[i1]+"]");
a=list.toArray(a);
System.out.print("使用a数组接收a:[");
for (i1 = 0; i1 < a.length-1; i1++) {
System.out.print(a[i1]+" ");
}
System.out.println(a[i1]+"]");
运行结果:
|