本文共 4353 字,大约阅读时间需要 14 分钟。
List 是 Java 集合框架中扩展 Collection 接口的接口,是一个有序的集合。它允许添加重复元素,支持 null 元素,索引从 0 开始,并且支持泛型。
List 提供了丰富的操作方法,以下是常用的几个:
package demo;import java.util.*;import java.util.function.Consumer;public class ListDemo { public static void main(String[] args) { String str = "t a l k i s c h e a p s h o w m e t h e c o d e"; List list1 = Arrays.asList(str.split(" ")); System.out.println("原始列表: " + list1); System.out.println("元素数量: " + list1.size()); System.out.println("是否为空: " + list1.isEmpty()); System.out.println("是否包含 'a': " + list1.contains("a")); // 将 list1 转换为 ArrayList list1 = new ArrayList<>(list1); list1.add("**"); list1.add(6, "dingwen"); // 删除第一个匹配的 't' System.out.println("删除 't': " + list1.remove("t")); List list2 = new ArrayList<>(); list2.add("dingwen"); list2.add("t"); list1.retainAll(list2); System.out.println("列表保留结果: " + list2); // 使用 Consumer 消费列表元素 Consumer stringConsumer = System.out::print; list2.listIterator(2).forEachRemaining(stringConsumer); System.out.println(); // 获取和设置元素 list2.set(1, "000"); System.out.println("设置后的元素: " + list2.get(1)); // 获取子列表 list1.subList(1, 1).iterator().forEachRemaining(stringConsumer); // 合并两个列表 list1.addAll(2, list2); List list3 = new ArrayList<>(); list3.add(1); list3.add(2); list3.add(3); list3.replaceAll(num -> num * 100); Iterator iterator = list3.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } // 排序 List list5 = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 10; i++) { list5.add(random.nextInt(1000)); } Consumer integerConsumer = System.out::print; list5.iterator().forEachRemaining(integerConsumer); list5.sort((a, b) -> a - b); System.out.println(); list5.forEach(num -> System.out.print(" " + num)); }} List 本质是数组,以地址形式存储。浅拷贝会改变地址引用,导致内容相互影响。
public static void main(String[] args) { List list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); // 浅拷贝方式1 List list2 = new ArrayList<>(); list1.set(1, 100); list1.forEach(new Consumer () { @Override public void accept(Integer integer) { list2.add(integer); } }); System.out.println("list2: " + list2); // 浅拷贝方式2 List list3 = new ArrayList<>(list1); System.out.println("list3: " + list3); // 浅拷贝方式3 List list4 = new ArrayList<>(); System.arraycopy(list1, 0, list4, 0, list1.size()); System.out.println("list4: " + list4);} 深拷贝是通过序列化实现的,创建新的地址指向独立内容。
public staticList deepCopy(List src) throws IOException, ClassNotFoundException { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(src); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); @SuppressWarnings("unchecked") List dest = (List ) in.readObject(); return dest;}public class Test implements Cloneable { public String name[]; public Test() { name = new String[2]; } public Object clone() { Test o = null; try { o = (Test) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return o; }}
转载地址:http://exka.baihongyu.com/