ArrayList应用

95 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

特点

  • ArrayList 是 List 接口的实现类,底层是使用数组实现的存储;

  • 元素有序,允许重复;

  • 查询效率高,增加、删除效率低;

  • 线程不安全。

基本使用

实例化

# 使用ArrayList声明变量
ArrayList<String> list = new ArrayList<>();

# 使用List接口声明变量
List<String> list = new ArrayList<>();

使用ArrayList声明变量

  • 优点: 可使用的方法最多,除ArrayList类中定义的方法外,还可调用List接口、Collection接口中的方法;

  • 不足: 灵活性差,如果变量类型发生改变,维护成本较高,需要修改的地方会比较多。

使用List接口声明变量

  • 优点: 灵活性高,可维护性好,是面向对象中面向接口编程思维的具体体现;

  • 不足: 仅能调用List接口、Collection接口中的方法。

// 添加元素
boolean abc = list.add("abc");
// 删除元素
boolean abc1 = list.remove("abc");
// 转换为数组
Object[] str = list.toArray();
// 判断元素是否在容器中存在
boolean def = list.contains("def");
System.out.println(def);
boolean d = list.contains("dedf");
System.out.println(d);
// 判断容器是否为空
boolean empty = list.isEmpty();
// 获取元素个数
int size = list.size();
// 清空容器
list.clear();

索引操作

底层是基于数组存储,可以根据索引位置操作元素。

//向指定位置添加元素,索引范围为 0 ~ 容器大小-1,否则会报下标越界
list.add(0, "ccc");
//获取指定位置元素,索引范围为 0 ~ 容器大小-1,否则会报下标越界
String s = list.get(0);
//替换指定位置元素
String new_element = list.set(1, "new element");
//删除指定位置元素
String remove = list.remove(0);
//查找元素在容器中第一次出现的位置
int index = list.indexOf("abc");
//查找元素在容器中最后一次出现的位置
int lastIndexOf = list.lastIndexOf("abc");

集合操作

//初始化两个容器
List<String> lista = new ArrayList<>();
lista.add("a");
lista.add("b");
lista.add("c");
List<String> listb = new ArrayList<>();
listb.add("a");
listb.add("d");
listb.add("e");
//并集,两个容器全部元素,不会对元素做去重操作
lista.addAll(listb);
System.out.println(Arrays.toString(lista.toArray()));
//交集,两个集合取共同包含的元素
lista = new ArrayList<>();
lista.add("a");
lista.add("b");
lista.add("c");
lista.retainAll(listb);
System.out.println(Arrays.toString(lista.toArray()));
//差集,a-b 将集合b的元素从a中排除除出
lista = new ArrayList<>();
lista.add("a");
lista.add("b");
lista.add("c");
lista.removeAll(listb);
System.out.println(Arrays.toString(lista.toArray()));

对应的输出为:

[a, b, c, a, d, e]

[a]

[b, c]