文章目录
1.ArrayList与Array的区别
Array:
1.效率高 O(1)
2.占用空间小
3.长度固定(只能修改,不能增删)
ArrayList:
1.执行修改的时候效率和Array一样 O(1),执行增删的时候为 O(n),需要进行新旧数组的拷贝操作
2.占用空间略大于Array
3.长度灵活可变
2.应用场景
当业务单一或逻辑简单的时候使用Array来提升运行效率
当业务或逻辑复杂的时候使用ArrayList来提升开发效率
3.声明并使用ArrayList
(1)单一数据类型
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
// 创建集合 --------------------------------
List<String> list = new ArrayList<>();
// 新增 -----------------------------------
list.add("白夜行");
list.add("白夜行");
list.add("解忧杂货店");
list.add("解忧杂货店");
list.add("嫌疑人X的献身");
list.add("沉默的巡游");
System.out.println(list); // [白夜行, 白夜行, 解忧杂货店, 解忧杂货店, 嫌疑人X的献身, 沉默的巡游]
// 删除 ------------------------------------
// 根据值删除元素
// 删除所有匹配到的值
list.removeAll(Arrays.asList("白夜行"));
System.out.println(list); // [解忧杂货店, 解忧杂货店, 嫌疑人X的献身, 沉默的巡游]
// 根据值删除元素
// 删除首次匹配到的值
list.remove("解忧杂货店");
System.out.println(list); // [解忧杂货店, 嫌疑人X的献身, 沉默的巡游]
// 根据索引删除元素
list.remove(1);
System.out.println(list); // [解忧杂货店, 沉默的巡游]
// 修改 ------------------------------------
// 根据索引修改
list.set(0, "湖畔");
System.out.println(list); // [湖畔, 沉默的巡游]
}
}
(2)多种数据类型
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
// 创建集合 --------------------------------
List<Object> list = new ArrayList<>();
// 新增 -----------------------------------
list.add(111);
list.add(111);
list.add(8);
list.add(8);
list.add("好耶");
list.add("好耶");
list.add(false);
list.add(null);
System.out.println(list); // [111, 111, 8, 8, 好耶, 好耶, false, null]
// 删除 ------------------------------------
// 根据值删除元素
// 删除所有匹配到的值
list.removeAll(Arrays.asList(111));
System.out.println(list); // [8, 8, 好耶, 好耶, false, null]
// 根据值删除元素
// 删除首次匹配到的值
// 值为整数的情况
list.remove(list.remove(Integer.valueOf(8)));
System.out.println(list); // [8, 好耶, 好耶, false, null]
// 根据值删除元素
// 删除首次匹配到的值
// 值不为整数的情况
list.remove(list.remove("好耶"));
System.out.println(list); // [8, 好耶, false, null]
// 根据索引删除元素
list.remove(3);
System.out.println(list); // [8, 好耶, null]
// 修改 ------------------------------------
// 根据索引修改
list.set(3, "湖畔");
System.out.println(list); // [8, 好耶, 湖畔]
}
}
4.ArrayList与Array互转
(1)ArrayList转数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("白夜行");
list.add("沉默的巡游");
list.add("解忧杂货店");
// ArrayList转数组
String[] array = list.toArray(new String[list.size()]);
System.out.println(array.getClass()); // class [Ljava.lang.String;
System.out.println(Arrays.deepToString(array)); // [白夜行, 沉默的巡游, 解忧杂货店]
}
}
(2)数组转ArrayList
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
String[] array = {"白夜行", "解忧杂货店", "沉默的巡游"};
// 数组转ArrayList
List<String> list = Arrays.asList(array);
System.out.println(list.getClass()); // class java.util.Arrays$ArrayList
System.out.println(list); // [白夜行, 解忧杂货店, 沉默的巡游]
}
}
上面这种方式返回值是按照指定数组生成的List,大小固定,因此不能新增也不能删除,只能修改,如果需要进行新增或修改,就new一个ArrayList接收这个集合
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
String[] array = {"白夜行", "解忧杂货店", "沉默的巡游"};
// 数组转ArrayList
List<String> list = new ArrayList<>(Arrays.asList(array));
System.out.println(list.getClass()); // class java.util.ArrayList
System.out.println(list); // [白夜行, 解忧杂货店, 沉默的巡游]
}
}
或者使用Java8的流操作
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class test {
public static void main(String[] args) {
String[] array = {"白夜行", "解忧杂货店", "沉默的巡游"};
// 数组转ArrayList
List<String> list = Stream.of(array).collect(Collectors.toList());
System.out.println(list); // [白夜行, 解忧杂货店, 沉默的巡游]
}
}