当前位置: 首页 > news >正文

罗湖区网站公司ui设计培训班需要学几个月

罗湖区网站公司,ui设计培训班需要学几个月,打造一个网站需要多少钱,网站多网合一在 Java 的集合框架中#xff0c;List 是 Collection 的重要子接口#xff0c;以其有序、可重复的特点广泛应用于开发中。本文将详细探讨 List 的核心概念、主要实现类#xff08;如 ArrayList 和 LinkedList#xff09;的底层原理#xff0c;以及使用中需要注意的常见问题…在 Java 的集合框架中List 是 Collection 的重要子接口以其有序、可重复的特点广泛应用于开发中。本文将详细探讨 List 的核心概念、主要实现类如 ArrayList 和 LinkedList的底层原理以及使用中需要注意的常见问题。 List 简介 List 是一个接口继承自 Collection代表一个有序队列允许元素重复。其核心特点是按照插入顺序存储元素并支持通过索引快速访问。List 的抽象实现包括 AbstractList继承自 AbstractCollection实现了 List 接口的大部分方法除 size() 和 get(int) 外为具体实现类提供基础支持。AbstractSequentialList继承自 AbstractList专注于链表操作实现了基于索引的全部功能适合顺序访问的场景。 常见的 List 实现类包括 ArrayList、LinkedList、Vector 和 Stack其中 ArrayList 和 LinkedList 是日常开发中最常用的两种。 ArrayList 和 LinkedList ArrayList 基于动态数组实现容量有限超出时自动扩容默认初始容量为 10扩容为原大小的 1.5 倍。随机访问快时间复杂度 O(1)但插入和删除较慢受位置影响可能需要移动大量元素。非线程安全。 LinkedList 基于双向链表实现无容量限制。插入和删除快头尾操作 O(1)中间操作 O(n)但随机访问慢需遍历O(n)。非线程安全。 Vector 和 Stack Vector与 ArrayList 类似但通过 synchronized 方法实现线程安全适用于并发场景。Stack继承自 Vector通过同步方法实现栈功能LIFO后进先出也是线程安全的。 ArrayList 详解 基本特性 ArrayList 是基于动态数组的实现其定义如下 public class ArrayListE extends AbstractListEimplements ListE, RandomAccess, Cloneable, java.io.Serializable实现 List 接口支持所有列表操作。实现 RandomAccess 接口支持快速随机访问。实现 Cloneable 和 Serializable支持浅拷贝和序列化。非线程安全。 数据结构 ArrayList 的核心字段包括 private static final int DEFAULT_CAPACITY 10; // 默认初始容量 transient Object[] elementData; // 存储元素的数组 private int size; // 当前元素个数elementDataObject[] 数组实际存储元素支持随机访问。size记录当前元素数量默认初始容量为 10超出时扩容。 构造方法 ArrayList 提供三种构造方式 public ArrayList() { // 默认构造初始化空数组this.elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }public ArrayList(int initialCapacity) { // 指定初始容量if (initialCapacity 0) {this.elementData new Object[initialCapacity];} else if (initialCapacity 0) {this.elementData EMPTY_ELEMENTDATA;} else {throw new IllegalArgumentException(Illegal Capacity: initialCapacity);} }建议初始化时指定容量避免频繁扩容带来的性能开销。 扩容机制 添加元素时若容量不足ArrayList 会调用 grow() 方法扩容 private void grow(int minCapacity) {int oldCapacity elementData.length;int newCapacity oldCapacity (oldCapacity 1); // 扩容为 1.5 倍if (newCapacity - minCapacity 0) newCapacity minCapacity;elementData Arrays.copyOf(elementData, newCapacity); // 数组复制 }扩容涉及数组复制性能开销较大因此合理设置初始容量非常重要。 操作效率 访问get(int index) 通过数组下标直接访问时间复杂度 O(1)。添加 add(E e)尾部添加若无需扩容O(1)若扩容O(n)。add(int index, E element)指定位置需移动后续元素O(n)。 删除remove(int index) 需移动后续元素O(n)位置越靠前开销越大。 Fail-Fast 机制 ArrayList 使用 modCount 记录结构变更次数增删操作或扩容。迭代或序列化时若 modCount 变化则抛出 ConcurrentModificationException这就是 fail-fast 机制。 LinkedList 详解 基本特性 LinkedList 基于双向链表实现其定义如下 public class LinkedListEextends AbstractSequentialListEimplements ListE, DequeE, Cloneable, java.io.Serializable实现 List 和 Deque可用作列表、队列或栈。支持浅拷贝和序列化。非线程安全。 数据结构 LinkedList 使用双向链表核心字段包括 transient int size 0; // 节点数 transient NodeE first; // 头节点 transient NodeE last; // 尾节点private static class NodeE { // 节点定义E item; // 数据NodeE next; // 后继NodeE prev; // 前驱... }操作效率 访问get(int index) 需从头或尾遍历至目标位置O(n)。建议使用迭代器遍历。添加 addFirst(E e)、addLast(E e)头尾操作O(1)。add(int index, E element)需定位O(n)。 删除remove(Object o) 或 remove(int index) 需遍历定位O(n)但调整指针开销为 O(1)。 序列化 与 ArrayList 类似LinkedList 使用 transient 修饰字段并重写 writeObject 和 readObject仅序列化有效节点。 ArrayList vs. LinkedList 特性ArrayListLinkedList线程安全否否底层结构动态数组 (Object[])双向链表随机访问O(1)支持 RandomAccessO(n)不支持插入/删除尾部 O(1)其他 O(n)头尾 O(1)其他 O(n)内存占用预留空间浪费每个节点存储指针占用更多 使用建议ArrayList 适用于随机访问频繁的场景LinkedList 适合频繁头尾操作的场景。但实际开发中ArrayList 通常更常用甚至 LinkedList 作者 Josh Bloch 也表示很少使用它。 List 使用中的常见问题 Arrays.asList 的陷阱 问题 1基本类型数组转换异常 int[] arr {1, 2, 3}; List list Arrays.asList(arr); // 输出: [[I...], size1Arrays.asList 将 int[] 视为单一对象而非元素集合。解决方法 使用 Arrays.streamJava 8ListInteger list Arrays.stream(arr).boxed().collect(Collectors.toList());使用包装类型数组Integer[] arr {1, 2, 3}; ListInteger list Arrays.asList(arr);问题 2不支持增删操作 Arrays.asList 返回的 List 是 Arrays 内部类 ArrayList未实现 add 和 remove调用时抛出 UnsupportedOperationException。 问题 3原始数组修改影响 List String[] arr {1, 2, 3}; ListString list Arrays.asList(arr); arr[1] 4; // list 同步变为 [1, 4, 3]解决方法新建 ArrayList 包装 ListString list new ArrayList(Arrays.asList(arr));List.subList 的陷阱 subList 返回的子列表与原列表共享存储修改一方会影响另一方且原列表结构变更可能导致 ConcurrentModificationException。 示例内存泄漏 ListInteger rawList IntStream.rangeClosed(1, 100000).boxed().collect(Collectors.toList()); ListInteger subList rawList.subList(0, 1); // rawList 无法被 GC 回收解决方法新建独立列表 ListInteger subList new ArrayList(rawList.subList(0, 1));示例并发修改异常 ListInteger list IntStream.rangeClosed(1, 10).boxed().collect(Collectors.toList()); ListInteger subList list.subList(1, 4); list.add(0); // 修改原列表 subList.forEach(System.out::println); // 抛出 ConcurrentModificationException解决方法 使用 new ArrayList(subList)。使用 Stream APIListInteger subList list.stream().skip(1).limit(3).collect(Collectors.toList());总结 List 作为 Java 集合框架的重要组成部分其实现类 ArrayList 和 LinkedList 各有优劣开发者需根据场景选择合适的实现。同时使用 Arrays.asList 和 subList 时需注意其潜在问题避免踩坑。通过深入理解其底层原理和特性我们可以更高效地编写健壮代码。
http://www.yayakq.cn/news/4452/

相关文章:

  • 网站建设评审验收会议主持词做企业网站和邮箱
  • 阿克苏网站开发牛魔王网站建设
  • 加强检察门户网站建设情况文档阅读网站模板下载
  • 做高仿网站网站建设与设计ppt模板
  • 厦门哪家做网站好电子商务网站开发环境示范
  • 周口网站设计网站做的一样算不算侵权
  • 网站建设提供书面资料清单Wordpress4.0参考手册.CHM
  • APP和网站是一样吗网站转化路径
  • 网站页面切换效果长春网站建设技术外包
  • 自己搭建服务器做网站网站网络排名优化方法
  • 如何做网站首页图电商发展趋势和未来
  • 网站备案查询工具xenforo和wordpress
  • 微网站首选公司淘宝客推广有效果吗
  • 短裙怎么做视频网站沧州国外网站建设
  • 网站域名是不是网址在线生成电子印章
  • ps做网站logo门户网站建站系统
  • 5个免费安全的资源网站建设通下载
  • 物联网技术应用专业是学什么的广州seo代理计费
  • 网站seo 优帮云wordpress网站搬家图片路径
  • 物流网站查询阅读的网站建设需要多少钱
  • 茂名专业网站建设太原网站推广公司
  • 网站被k的原因查内部券的网站是怎么做的
  • 网站域名变了能查吗建设银行官网首页网站南山片区
  • 什么样算网站需要备案瑞安市住房和城乡规划建设局网站
  • 故宫博物院官网网站咋做的海城市网站建设
  • 一步步教做音乐网站南通网站设计专家
  • 站长之家0个人怎样建网站赚钱
  • 在网站开发中哪里需要js文件wordpress清理网站缓存
  • 0网站建设的好坏可以依据的标准有网站链群怎么做
  • 淘宝联盟网站建设男女激烈做羞羞事网站