一个网站如何创建多个页面珠海网站建设哪家权威
2026/4/6 18:06:02 网站建设 项目流程
一个网站如何创建多个页面,珠海网站建设哪家权威,推广案例,深圳公共交易资源平台本系列可作为JAVA学习系列的笔记#xff0c;文中提到的一些练习的代码#xff0c;小编会将代码复制下来#xff0c;大家复制下来就可以练习了#xff0c;方便大家学习。 点赞关注不迷路#xff01;您的点赞、关注和收藏是对小编最大的支持和鼓励#xff01; 系列文章目录…本系列可作为JAVA学习系列的笔记文中提到的一些练习的代码小编会将代码复制下来大家复制下来就可以练习了方便大家学习。点赞关注不迷路您的点赞、关注和收藏是对小编最大的支持和鼓励系列文章目录JAVA初阶---------已更完JAVA数据结构 DAY1-集合和时空复杂度JAVA数据结构 DAY2-包装类和泛型JAVA数据结构 DAY3-List接口目录目录系列文章目录目录前言一、什么是 List—— 从接口继承到数据结构本质1. List 的接口继承关系2. List 的本质线性表二、List 常见接口详解 —— 核心方法与使用场景1. List 接口完整方法清单2. 核心方法重点解析含使用场景1增删操作指定位置的精准控制2查询与修改基于下标的快速操作3查找元素位置indexOf 与 lastIndexOf4截取子 ListsubList (int fromIndex, int toIndex)5替换与排序replaceAll 与 sort6List 专属迭代器ListIterator三、List 的使用注意事项 —— 接口不能实例化需依赖实现类1. 关键前提List 是接口不能直接实例化2. 实例化方式面向接口编程3. 常见使用场景选择4. 其他注意事项四、总结前言小编作为新晋码农一枚会定期整理一些写的比较好的代码作为自己的学习笔记会试着做一下批注和补充如转载或者参考他人文献会标明出处非商用如有侵权会删改欢迎大家斧正和讨论在 Java 编程中集合框架是不可或缺的核心部分而 List 作为其中最常用的接口之一承担着存储有序、可重复元素的重要职责。无论是日常开发中的数据存储还是复杂业务场景下的元素操作List 都发挥着关键作用。本文将从 “什么是 List”“List 常见接口”“List 的使用” 三个核心维度结合底层原理与实际应用全面拆解 List 接口的相关知识帮助大家彻底掌握这一基础且重要的集合类型。一、什么是 List—— 从接口继承到数据结构本质要理解 List首先需要明确其在 Java 集合框架中的定位以及其底层对应的数据结构特征。1. List 的接口继承关系在 Java 集合框架中List 是一个接口其继承体系如下Iterable - Collection - List这意味着 List 不仅继承了 Collection 接口的所有规范还拥有 Iterable 接口赋予的 “可遍历” 能力。Iterable 接口作为集合框架的顶层接口之一Iterable 的核心作用是标记实现类 “支持逐个元素遍历”。它定义了 3 个关键方法iterator()返回一个迭代器Iterator对象用于遍历集合元素forEach(Consumer? super T)基于函数式编程的遍历方式可通过 Lambda 表达式简化遍历逻辑spliterator()返回一个可分割的迭代器Spliterator支持并行遍历提升大数据量下的遍历效率。Collection 接口作为 List 的直接父接口Collection 规范了所有容器类的核心通用方法这些方法在 List 中均有实现或重写具体包括方法功能描述size()返回集合中元素的个数返回值为 intcontains(Object o)判断集合中是否包含指定元素返回值为 booleaniterator()返回迭代器对象用于遍历元素toArray()将集合转换为 Object 类型的数组toArray(T[] a)将集合转换为指定类型的数组泛型支持add(E e)向集合中添加元素返回值为 boolean表示添加是否成功remove(Object o)删除集合中遇到的第一个指定元素返回值为 booleancontainsAll(Collection?)判断集合是否包含另一个集合的所有元素addAll(Collection? extends E)将另一个集合的所有元素添加到当前集合尾部removeAll(Collection?)移除当前集合中与另一个集合共有的所有元素removeIf(Predicate? super E)根据指定条件Predicate 接口移除元素retainAll(Collection?)保留当前集合中与另一个集合共有的元素交集操作clear()清空集合中的所有元素equals(Object o)判断当前集合与指定对象是否相等hashCode()返回集合的哈希值spliterator()返回可分割迭代器支持并行遍历stream()返回集合的顺序流Stream支持流式编程parallelStream()返回集合的并行流支持多线程流式处理isEmpty()判断集合是否为空返回值为 boolean2. List 的本质线性表从数据结构的角度来看List 的本质是线性表—— 即由 n 个具有相同类型元素组成的有限序列。线性表的核心特征的是元素之间具有明确的 “先后顺序”每个元素都有唯一的前驱除第一个元素和后继除最后一个元素支持在任意位置进行增删改查操作以及完整的遍历功能。这也是 List 与 Set无序、不可重复最核心的区别List 保证元素的 “有序性”插入顺序与存储顺序一致和 “可重复性”允许存储多个相同的元素。二、List 常见接口详解 —— 核心方法与使用场景List 作为 Collection 的子接口不仅继承了所有父接口的方法还根据线性表的特性扩展了一系列针对 “下标操作” 的专属方法。这些方法是 List 最核心的功能也是日常开发中使用频率最高的部分。1. List 接口完整方法清单List 接口的方法可分为 “继承自 Collection 的方法” 和 “List 专属扩展方法” 两类完整清单如下方法分类方法签名功能描述继承方法size()返回元素个数contains(Object o)判断是否包含指定元素iterator()返回普通迭代器toArray()转换为 Object 数组toArray(T[] a)转换为指定类型数组add(E e)尾插元素 eremove(Object o)删除第一个遇到的元素 ocontainsAll(Collection?)判断是否包含另一个集合的所有元素addAll(Collection? extends E)尾插另一个集合的所有元素removeAll(Collection?)移除与另一个集合的共有元素retainAll(Collection?)保留与另一个集合的共有元素clear()清空所有元素equals(Object o)判断集合是否相等hashCode()返回哈希值spliterator()返回可分割迭代器isEmpty()判断集合是否为空stream()/parallelStream()返回顺序流 / 并行流removeIf(Predicate? super E)按条件移除元素forEach(Consumer? super T)函数式遍历专属扩展方法addAll(int index, Collection? extends E)在指定下标 index 处插入另一个集合的所有元素replaceAll(UnaryOperatorE)按指定规则UnaryOperator替换所有元素sort(Comparator? super E)按指定比较器Comparator排序get(int index)获取下标 index 处的元素set(int index, E element)将下标 index 处的元素替换为 elementadd(int index, E element)在下标 index 处插入元素 elementremove(int index)删除下标 index 处的元素返回被删除的元素indexOf(Object o)返回第一个元素 o 的下标不存在返回 - 1lastIndexOf(Object o)返回最后一个元素 o 的下标不存在返回 - 1listIterator()返回 List 专属迭代器支持双向遍历、添加 / 修改元素listIterator(int index)从指定下标 index 开始的 List 专属迭代器subList(int fromIndex, int toIndex)截取子 List范围[fromIndex, toIndex)左闭右开2. 核心方法重点解析含使用场景在上述方法中以下几个是 List 最常用的核心方法需要重点掌握其用法和注意事项1增删操作指定位置的精准控制add(E e)尾插元素直接在 List 的末尾添加新元素时间复杂度取决于实现类ArrayList 为 O (1)LinkedList 为 O (1)。示例ListString list new ArrayList(); list.add(Java); // 尾插Java list.add(Python); // 尾插Python // 此时list为[Java, Python]add(int index, E element)在指定下标插入元素插入后原下标及后续元素均向后移位。注意下标不能超出 [0, size ()] 范围否则会抛出IndexOutOfBoundsException。示例list.add(1, C); // 在下标1处插入C // 此时list为[Java, C, Python]remove(int index)删除指定下标的元素返回被删除的元素后续元素向前移位。同样需要注意下标合法性[0, size ()-1]。示例String removed list.remove(1); // 删除下标1的C System.out.println(removed); // 输出C // 此时list为[Java, Python]remove(Object o)删除第一个遇到的指定元素若元素不存在则返回 false。注意该方法依赖元素的 equals () 方法判断是否匹配因此自定义对象需重写 equals () 方法。示例boolean isRemoved list.remove(Python); // 删除第一个Python System.out.println(isRemoved); // 输出true // 此时list为[Java]2查询与修改基于下标的快速操作get(int index)获取指定下标的元素是 List 最核心的查询方法时间复杂度取决于实现类ArrayList 为 O (1)LinkedList 为 O (n)。示例String element list.get(0); // 获取下标0的元素 System.out.println(element); // 输出Javaset(int index, E element)修改指定下标的元素返回原元素。该方法不会改变 List 的长度仅替换元素值。示例String old list.set(0, JavaScript); // 将下标0的元素改为JavaScript System.out.println(old); // 输出Java // 此时list为[JavaScript]3查找元素位置indexOf 与 lastIndexOfindexOf(Object o)从 List 头部开始查找返回第一个匹配元素的下标未找到则返回 - 1。lastIndexOf(Object o)从 List 尾部开始查找返回最后一个匹配元素的下标未找到则返回 - 1。示例ListInteger numList new ArrayList(); numList.add(2); numList.add(5); numList.add(2); numList.add(8); int first numList.indexOf(2); // 查找第一个2的下标 int last numList.lastIndexOf(2); // 查找最后一个2的下标 System.out.println(first); // 输出0 System.out.println(last); // 输出24截取子 ListsubList (int fromIndex, int toIndex)该方法用于截取 List 的部分元素返回一个新的 List注意返回的子 List 是原 List 的视图修改子 List 会影响原 List反之亦然。范围是左闭右开区间 [fromIndex, toIndex)即包含 fromIndex不包含 toIndex。合法范围0 ≤ fromIndex ≤ toIndex ≤ 原 List.size ()否则抛出IndexOutOfBoundsException。示例ListInteger sub numList.subList(1, 3); // 截取下标1到3的元素[5, 2] sub.set(0, 6); // 修改子List的第一个元素为6 System.out.println(numList); // 原List变为[2, 6, 2, 8]5替换与排序replaceAll 与 sortreplaceAll(UnaryOperatorE)通过 UnaryOperator 函数式接口对 List 中的所有元素进行替换UnaryOperator 接收一个参数返回同类型结果。示例将所有数字翻倍numList.replaceAll(n - n * 2); System.out.println(numList); // 输出[4, 12, 4, 16]sort(Comparator? super E)按指定的 Comparator 排序若传入 null 则按元素的自然顺序需实现 Comparable 接口排序。示例按数字降序排序numList.sort((a, b) - b - a); System.out.println(numList); // 输出[16, 12, 4, 4]6List 专属迭代器ListIteratorListIterator 是 Iterator 的子接口专为 List 设计支持以下额外功能双向遍历hasPrevious()判断是否有前一个元素、previous()获取前一个元素插入元素add(E e)在当前迭代位置插入元素修改元素set(E e)修改当前迭代到的元素获取下标nextIndex()获取下一个元素的下标、previousIndex()获取前一个元素的下标。示例使用 ListIterator 双向遍历并修改元素ListIteratorInteger iterator numList.listIterator(); // 正向遍历 while (iterator.hasNext()) { int num iterator.next(); if (num 4) { iterator.set(5); // 将4改为5 } } // 反向遍历 while (iterator.hasPrevious()) { System.out.print(iterator.previous() ); // 输出5 4 12 16 }三、List 的使用注意事项 —— 接口不能实例化需依赖实现类1. 关键前提List 是接口不能直接实例化List 作为接口仅定义了方法规范没有具体的实现逻辑因此不能直接通过 new List () 实例化。若要使用 List必须选择其实现类Java 集合框架中最常用的实现类有两个ArrayList基于动态数组实现查询效率高O (1)增删效率低尤其是中间位置O (n)LinkedList基于双向链表实现增删效率高O (1)查询效率低O (n)。2. 实例化方式面向接口编程推荐使用 “接口引用指向实现类对象” 的方式实例化便于后续切换实现类符合开闭原则// 实例化ArrayList ListString arrayList new ArrayList(); // 实例化LinkedList ListString linkedList new LinkedList();3. 常见使用场景选择若场景以 “查询、修改” 为主如读取配置列表、展示数据优先选择ArrayList若场景以 “增删” 为主如队列、栈操作优先选择LinkedList若需要线程安全的 List可使用Collections.synchronizedList(ListT list)包装或直接使用CopyOnWriteArrayList并发场景推荐。4. 其他注意事项下标越界问题List 的下标范围是 [0, size ()-1]增删查改时需避免下标超出该范围否则抛出IndexOutOfBoundsException元素相等判断contains()、indexOf()、remove(Object o)等方法依赖元素的equals()方法自定义对象需重写equals()和hashCode()方法保证一致性空指针问题若 List 为 null调用任何方法都会抛出NullPointerException建议初始化时直接创建实例如ListString list new ArrayList()而非赋值为 null子 List 的视图特性subList()返回的子 List 与原 List 共享底层数据修改任一对象都会影响另一方若需独立的子 List可新建一个集合如new ArrayList(subList)。四、总结List 作为 Java 集合框架中最核心的接口之一其本质是线性表具备 “有序、可重复” 的特征同时提供了丰富的增删改查方法尤其是基于下标的精准操作满足了大多数场景的数据存储需求。本文从接口继承关系、核心方法解析、使用注意事项三个层面全面覆盖了 List 的相关知识继承体系List 继承自 Collection间接继承自 Iterable拥有通用方法和遍历能力核心方法重点掌握下标操作get/set/add/remove、位置查找indexOf/lastIndexOf、子 List 截取、迭代器使用等实例化依赖 ArrayList、LinkedList 等实现类根据场景选择合适的实现类。掌握 List 的使用是 Java 编程的基础也是后续学习集合框架其他组件如 Set、Map的前提。在实际开发中需结合业务场景选择合适的实现类并注意规避下标越界、空指针、equals 方法未重写等常见问题才能充分发挥 List 的优势。总结以上就是今天要讲的内容本文简单记录了java数据结构仅作为一份简单的笔记使用大家根据注释理解您的点赞关注收藏就是对小编最大的鼓励

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询