[Java 基础]ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制。

ArrayList 的示意可以看 VCR:https://visualgo.net/en/array

创建 ArrayList 对象

final ArrayList<String> strings = new ArrayList<>();

这里创建 ArrayList 时需要设置 ArrayList 中装的元素的数据类型,这里的类型只能是引用数据类型。

创建了 ArrayList 对象,它就像一个容器,它提供了添加元素、获取指定下标位置的元素、修改元素、删除指定下标位置的元素、获取元素数量等方法。

常用方法

方法 描述
public void add(int index, E element) 将元素添加到指定下标位置
public boolean add(E e) 向 arrayList 的后面添加元素
public E get(int index) 获取指定下标位置的元素
public E remove(int index) 删除指定索引位置的元素
public boolean remove(Object o) 删除该元素在 arrayList 中第一次出现的那个元素
public int size() 获取 arrayList 中元素的数量
public boolean isEmpty() 判断 arrayList 是否为空

对 ArrayList 中的元素排序

如果想要对 ArrayList 中的元素排序,可以使用 Collections 这个工具类中的 sort 方法:

ArrayList<String> sites = new ArrayList<String>();
sites.add("gg");
sites.add("cc");
sites.add("dd");
sites.add("dd");
sites.add("ff");

// 按字母降序排序,不传 Comparator.reverseOrder() 就是正序
Collections.sort(sites, Comparator.reverseOrder());

for (String i : sites) {
    System.out.println(i);
}

如果 arrayList 中的元素是对象,如果对象的类实现了 Comparable 接口,调用 Collections.sort 方法,会使用 compareTo 方法中定义的规则。

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // 按 name 升序
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

如果想更灵活一点,可以使用 Comparator:

Collections.sort(people, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.getAge(), p2.getAge());
    }
});

Lambda 表达式也可以实现相同的效果,这个会在进阶课程中讲

和其他容器对比

特性 ArrayList LinkedList HashSet HashMap
是否保持插入顺序
是否允许元素重复 不允许 key 重复
查找效率 O(n)(遍历查找) O(n)(遍历查找) O(1)(哈希查找) O(1)(哈希查找)
适用场景 索引查找 频繁插入、删除 去重、快速查找 存储键值映射

更多关于 ArrayList 的信息可以查阅 Oracle 的 Java Doc 或查看源码:https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

你可能感兴趣的:(Java,基础课程,java,java,基础)