博客
关于我
Java List 常用整理
阅读量:266 次
发布时间:2019-03-01

本文共 4353 字,大约阅读时间需要 14 分钟。

Java List详解

Java List

List 是 Java 集合框架中扩展 Collection 接口的接口,是一个有序的集合。它允许添加重复元素,支持 null 元素,索引从 0 开始,并且支持泛型。

List 的基本特性

  • 允许添加重复元素
  • 元素允许为 null
  • 索引下标从 0 开始
  • 支持泛型

List 的常用方法

List 提供了丰富的操作方法,以下是常用的几个:

  • int size():获取列表中元素的数量。
  • boolean isEmpty():检查列表是否为空。
  • boolean contains(Object o):判断列表中是否包含指定元素。
  • Iterator iterator():返回适当的迭代器。
  • Object[] toArray():返回包含所有元素的数组。
  • boolean add(E e):将元素追加到末尾。
  • void clear():删除所有元素。
  • E get(int index):返回指定位置的元素。
  • E set(int index, E element):替换指定位置的元素。
  • ListIterator listIterator():返回元素的列表迭代器。
  • List subList(int fromIndex, int toIndex):返回指定范围内的列表部分。
  • void addAll(int index, Collection<? extends E> c):合并两个列表。
  • List replaceAll(UnaryOperator operator):对列表中的每个元素应用运算。
  • void sort(Comparator<? super E> comparator):对列表进行排序。
  • 案例代码

    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 static 
    List
    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/

    你可能感兴趣的文章
    PAT 1027 Colors in Mars
    查看>>
    PAT 1127 ZigZagging on a Tree[难]
    查看>>
    PAT 2-07. 素因子分解(20)
    查看>>
    PAT-乙级-1040 有几个PAT
    查看>>
    PATA1038题解(需复习)
    查看>>
    Patching Array
    查看>>
    Path does not chain with any of the trust anchors
    查看>>
    Path形状获取字符串型变量数据
    查看>>
    PAT甲级——1001 A+B Format (20分)
    查看>>
    Skywalking原理
    查看>>
    PAT甲级——1006 Sign In and Sign Out (25分)
    查看>>
    PAT甲级——1007 Maximum Subsequence Sum (25分)
    查看>>
    PAT甲级——1009 Product of Polynomials (25分)(最后一个测试点段错误)
    查看>>
    PayPal网站付款标准版(for PHP)
    查看>>
    Paystack Android SDK 集成与使用指南
    查看>>
    pbf格式详解,javascript加载导出pbf文件示例
    查看>>
    PbootCMS entrance.php SQL注入漏洞复现
    查看>>
    PbootCMS 前台RCE漏洞复现
    查看>>
    PBT
    查看>>
    PCA---主成成分分析
    查看>>