ArrayList常见操作
1.插入操作
尾插 e
`boolean add(E e)`
将 e 插入到 index 位置(指定位置插入)
`void add(int index, E element)`
尾插 c 中的元素(直接插入一个集合)
`boolean addAll(Collection<? extends E> c)`
将c插入到index位置(插入一个集合)
boolean addAll(int index, Collection<? extends E> c)
如下面这个例子
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(1);//尾插入1
System.out.println(arrayList1);
arrayList1.add(1, 2);//下标为1为位置插入2
System.out.println(arrayList1);
ArrayList<Integer> arrayList2 = new ArrayList<>();
arrayList2.addAll(arrayList1);//arrayList2尾插arrayList1的全部元素
System.out.println(arrayList2);
arrayList2.addAll(1, arrayList1);//从arrayList2下标为2的位置插入arrayList1的全部元素
System.out.println(arrayList2);
}
}
2.删除操作
删除 index 位置元素
E remove(int index)
删除遇到的第一个 o
boolean remove(Object o)
注意当我们元素类型是Integer时,代码remove(0)
会识别将0识别为Int,而不是Integer类型,remove(0)
中的这个0会认为是indexd的实参而不是Object实参,所以我们在删除存有Integer类型的元素时,需要进行装箱操作。
例如:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
System.out.println(arrayList1);
arrayList1.remove(new Integer(0));
System.out.println(arrayList1);
arrayList1.remove(0);
System.out.println(arrayList1);
}
}
3.获取操作
获取下标 index 位置元素
E get(int index)
例如
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
System.out.println(arrayList1);
System.out.println(arrayList1.get(0));
}
}
4.更新操作
将下标 index 位置元素设置为 element
E set(int index, E element)
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
System.out.println(arrayList1);
System.out.println(arrayList1.set(0,1));
System.out.println(arrayList1);
}
}
5.清空操作
void clear() //清空
例子
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
System.out.println(arrayList1);
arrayList1.clear();
System.out.println(arrayList1);
}
}
6.其他操作
判断 o 是否在线性表中
boolean contains(Object o)
返回第一个 o 所在下标
int indexOf(Object o)
返回最后一个 o 的下标
int lastIndexOf(Object o)
截取部分 list
List<E> subList(int fromIndex, int toIndex)
例子
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(0);
System.out.println(arrayList1);
System.out.println(arrayList1.contains(new Integer(0)));
System.out.println(arrayList1.indexOf(new Integer(0)));
System.out.println(arrayList1.lastIndexOf(new Integer(0)));
List <Integer> arrayList2 = arrayList1.subList(0, 2);//必须用List类型承接,同时下标范围依旧是左闭右开
System.out.println(arrayList2);
}
}
但是
subList
方法需要注意一下,看下面这个代码
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(0);
System.out.println(arrayList1);
List <Integer> subList = arrayList1.subList(0, 2);
System.out.println(subList);
subList.set(0, 1);//更新subList下标为0的元素值为1
System.out.println(subList);
System.out.println(arrayList1);//arrayList下标为0的元素也会变化
}
}
这是因为subList与arrayList共用一个value数组,注意subList方法并不是通过copy实现的,所以这不是浅拷贝。
3.3ArrayList的遍历
ArrayList有三种常见的遍历方式
第一种for循环+下标,这就不过多赘述了。
第二种是用for each
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
for (Integer x:arrayList1) {
System.out.print(x+" ");
}
}
}
第三种是使用迭代器
```java
import java.util.ArrayList;
import java.util.ListIterator;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(0);
arrayList1.add(1);
arrayList1.add(2);
for (Integer x:arrayList1) {
System.out.print(x+" ");
}
System.out.println();
//创建一个arrayList1的迭代器
ListIterator<Integer> it = arrayList1.listIterator();//it会指向集合受元素的前一个单位的位置
while(it.hasNext()){//it.hasNext()判断it的下一个位置是否有元素,有返回true,没有返回false
System.out.print(it.next()+" ");//回去it所指位置的下一个单位位置的元素内容并将next指向下一个元素
//这个it有点像C里面栈的头指针的含义
}
}
}
关于迭代器,可以去看这篇博客
https://blog.csdn.net/rbx508780/article/details/126980386