ArrayList 内部基于数组实现,你可以将其视作数组来用。

常用方法

增:add

通过 add() 方法可以向 ArrayList 中增加元素,有以下的两种增加方式:

  1. import java.util.ArrayList;
  2. public class Main {
  3. public static void main(String []args) {
  4. ArrayList<String> a = new ArrayList<>();
  5. //普通的在尾部添加
  6. a.add("aaa");
  7. a.add("bbb");
  8. a.add("ccc");
  9. //在指定位置插入
  10. a.add(2, "eee");
  11. }
  12. }

除了 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++ 里面的模板比较类似,此处不再赘述,在下面的章节再细说。