ArrayList 内部基于数组实现,你可以将其视作数组来用。
常用方法
增:add
通过 add() 方法可以向 ArrayList 中增加元素,有以下的两种增加方式:
import java.util.ArrayList;
public class Main {
public static void main(String []args) {
ArrayList<String> a = new ArrayList<>();
//普通的在尾部添加
a.add("aaa");
a.add("bbb");
a.add("ccc");
//在指定位置插入
a.add(2, "eee");
}
}
除了 add(),还可以使用 addElement() (其实和 add 完全等价)。
还有一个 addAll() 方法,可以将一个集合里面的所有元素加进去。
删:remove
通过 remove() 方法可以删除指定下标的元素,或者删除指定的对象。
import java.util.ArrayList;
public class Main {
public static void main(String []args) {
ArrayList<String> a = new ArrayList<>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
a.add("ddd");
//remove
a.remove(2);
a.remove("aaa");
//print
for (String s : a) {
System.out.println(s);
}
}
}
改:set
通过 set() 方法可以修改指定下标的元素。
import java.util.ArrayList;
public class Main {
public static void main(String []args) {
ArrayList<String> a = new ArrayList<>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
a.add("ddd");
//change
a.set(2, "eee");
//print
for (String s : a) {
System.out.println(s);
}
}
}
查:get,indexOf,contains
get() 用于获取指定下标的元素,indexOf() 则用来查询指定对象在 ArrayList 里面的位置,contains() 用于查询某个元素是否在 ArrayList 中。
import java.util.ArrayList;
public class Main {
public static void main(String []args) {
ArrayList<String> a = new ArrayList<>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
a.add("ddd");
//
System.out.println(a.contains("aaa"));//true
System.out.println(a.get(2));//ccc
System.out.println(a.indexOf("bbb"));//1
System.out.println(a.indexOf("eee"));//没有这个元素,输出-1
}
}
对了,还有个 containsAll() 方法,可以查一个集合是不是完全包含于我们这个 Arraylist 中。(contains 系列是 Collection 接口共有的方法)。
大小查询:size
转换为数组:toArray
清空:clear
判断是否为空:isEmpty
遍历
普通 for 循环
ArrayList<String> a = new ArrayList<>();
for (int i = 0; i < a.size(); ++i) {
//something
}
for-each 循环
ArrayList<String> a = new ArrayList<>();
for (String s : a) {
//something
}
迭代器循环
理论上大多数官方提供的数据结构都应该这么遍历,但我不咋喜欢。
//while写法
Iterator<String> i = a.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
//for写法
for (Iterator<String> i = a.iterator(); i.hasNext(); ) {
System.out.println(i.next());
}
泛型入门
ArrayList<String> a = new ArrayList<>();
//严格起来应该这么写
//ArrayList<String> a = new ArrayList<String>();
//也可以这么写,不用泛型,但是存进去的引用全部变成Object了
//ArrayList a = new ArrayList();
这个尖括号就是泛型的一种表现形式,和 C++ 里面的模板比较类似,此处不再赘述,在下面的章节再细说。