博客
关于我
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/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
    查看>>
    OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
    查看>>
    OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
    查看>>
    OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
    查看>>
    OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
    查看>>
    OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
    查看>>
    OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
    查看>>
    OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
    查看>>
    OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
    查看>>
    OpenCV与AI深度学习 | 基于OpenCV实现模糊检测 / 自动对焦
    查看>>
    OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
    查看>>
    OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
    查看>>
    OpenCV与AI深度学习 | 基于YoloV11自定义数据集实现车辆事故检测(有源码,建议收藏!)
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8实现高级目标检测和区域计数
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
    查看>>
    OpenCV与AI深度学习 | 基于YoloV8的药丸/片剂类型识别
    查看>>
    OpenCV与AI深度学习 | 基于YOLO和EasyOCR从视频中识别车牌
    查看>>