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

有什么好看的网站wordpress英文站

有什么好看的网站,wordpress英文站,高端玩家,租空间做网站ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Ar…ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Array)实现。元素在内存中是连续存储的。实现了 RandomAccess 接口,支持随机访问,可以通过索引快速定位元素。 LinkedList: 基于双向链表(Doubly Linked List)实现。每个元素(节点)包含数据和两个指针,分别指向前后节点。不支持随机访问,必须从头或尾遍历链表才能访问指定位置的元素。 RandomAccess是标志性接口,标识某个 List 实现支持快速随机访问。 (2) 性能特点 特性ArrayListLinkedList随机访问快速(时间复杂度为 O(1))。慢(时间复杂度为 O(n),需要遍历链表)。插入/删除较慢(时间复杂度为 O(n),可能需要移动元素)。快速(时间复杂度为 O(1),只需调整指针)。内存占用较低(仅存储元素和少量额外信息)。较高(每个节点需要存储数据和两个指针)。(3) 使用场景 ArrayList: 适用于频繁随机访问元素的场景。适合读多写少的场景。示例:存储一组用户 ID,并根据索引快速查找某个用户。 LinkedList: 适用于频繁插入和删除操作的场景。适合写多读少的场景。示例:实现队列或栈等数据结构。 2. ArrayList 的扩容机制 (1) 动态数组的特点 ArrayList 内部使用一个数组来存储元素。当数组容量不足时,ArrayList 会自动扩容以容纳更多元素。(2) 扩容过程 初始容量: 默认初始容量为 10。可以通过构造方法指定初始容量。ArrayListInteger list = new ArrayList(20); // 初始容量为 20扩容触发条件: 当添加新元素时,如果当前数组容量不足以容纳新元素,则触发扩容。 扩容策略: 新容量通常是原容量的 1.5 倍(即原容量 + 原容量的一半)。扩容后,会创建一个新的数组,并将原数组中的所有元素复制到新数组中。源码示例(JDK 8 中的部分代码):private void grow(int minCapacity) {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity 1); // 扩容为原来的 1.5 倍if (newCapacity - minCapacity 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE 0)newCapacity = hugeCapacity(minCapacity);elementData = Arrays.copyOf(elementData, newCapacity); // 复制到新数组 } private static int hugeCapacity(int minCapacity) { if (minCapacity 0) // 溢出(int 整型最大值溢出) throw new OutOfMemoryError(); return (minCapacity MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } 性能影响: 扩容操作涉及数组的复制,因此是一个耗时的操作。如果可以预估元素数量,建议在初始化时指定合适的容量,避免频繁扩容。 步骤 计算新容量:新容量通常是旧容量的 1.5 倍(即 oldCapacity + (oldCapacity 1))。例如,若当前容量为 10,则扩容后为 15。 比较最小需要容量:如果计算得到的新容量仍小于所需的最小容量(minCapacity),则将新容量设为 minCapacity。 检查最大容量限制:如果新容量超过了 ArrayList 能支持的最大容量(Integer.MAX_VALUE - 8),则将新容量设为 Integer.MAX_VALUE。 数组复制:最终,使用 Arrays.copyOf() 方法将原数组的元素复制到新数组中,并将新数组赋值给 elementData。 JDK 作者 Mark Reinhold 在 OpenJDK 邮件讨论中也提到,“减 8”是经验值,历史兼容留下的设置,它不是必须是 8,但不能是 0。 是为了防止堆内存溢出,大多数 JVM 对象是 8 字节对齐,加上对象头等等,但实际上大概率也是会堆内存溢出。 JDK21 的源码和 JDK8 稍有不同,但大致一样, JDK8 是硬编码,JDK21 是引入方法传入参数。 源码展示 private Object[] grow(int minCapacity) { int oldCapacity = elementData.length; if (oldCapacity 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { int newCapacity = ArraysSupport
http://www.pierceye.com/news/705028/

相关文章:

  • 同个主体新增网站备案施工企业副总经理竞聘
  • 视频网站后台设计针式个人知识库管理系统
  • 外围网站开发网页制作对联
  • 深圳福永网站建设网站多个用户怎样建设
  • 百度网站排名怎么提高wordpress页面全屏的插件
  • 企业网站优化方式wordpress 外链播放器
  • 设计衣服的网站久久诗歌网
  • 上海网站营销it运维网
  • 一起做网店广州站怎么推广软件让别人下载
  • 王晴儿网站建设方案wordpress媒体库 ftp
  • 乡村建设网站自己的网站做防伪码
  • 企业网站托管新乡企业网站建设
  • 移动网站开发课程设计莱芜四中网站
  • 做论坛网站赚钱吗做电影网站要几G空间的
  • 网站建设综合实训心得intitle 网站建设
  • 天津市做网站公司wordpress demo
  • 做外贸网站公司公司网站的seo优化
  • 网站页面设置上海微信小程序开发公司
  • 中企动力是怎么建设网站的房地产市场低迷
  • 成都眉山网站建设平台兼职网站开发
  • 化妆品网站的建设 论文php技术的网站开发
  • 女人与黑狗做视频网站网站seo关键词排名
  • ps制作个人网站营销软文怎么写
  • 建立网站的方案南京小程序开发网站建设
  • 类似淘宝的网站怎么做的产品推广会议流程
  • 写作网站的文风软件开发的基本过程
  • 做胃镜多少钱那好天津津门网站a顺德高端网站
  • 网站升级维护中 模板用ps怎么做网站背景
  • 免费商城网站建设建设银行企业网站首页
  • 北京哪家网站建设公司比较好帝国cms怎么做网站地图