【问题标题】:How does List.add(index,element) work internally in Java?List.add(index,element) 如何在 Java 内部工作?
【发布时间】:2019-12-14 02:18:13
【问题描述】:

Java API Docthis post 中所述,list.add(index,element) 会导致将给定元素添加到给定索引处。在此过程中,后续列表项将向右移动一个位置(通过在其索引中添加 1,如 API 文档中所述)

我的问题是这实际上是如何发生的?

假设我们有一个包含 100 个元素的 ArrayList,我们说add(0, 6),那么鉴于底层数据结构是一个数组,那么现在 API 将如何完成这个操作?

更具体地说:是否会将所有现有的 100 个元素复制到其直接正确的位置?还是有更有效的处理方式?

【问题讨论】:

  • 如果您想了解它是如何完成的,为什么不直接查看source code?您可以在我为您提供的链接中找到它,您可以在您安装的 JDK 中找到它。如果您使用的是好的 IDE,那么很容易查看该源代码。您使用的是 IDE,对吗?如果没有,省去很多麻烦,现在就买一个。

标签: java arraylist collections


【解决方案1】:

对于ArrayList,元素确实会向上移动。这只是线性内存访问,实际上速度惊人。

使用循环缓冲区的ArrayDeque 在前面插入更快。也就是说,它不仅跟踪最后一个元素的索引,还跟踪第一个元素和数组环绕。不幸的是,ArrayDeque 没有实现它应该做的List

非常慢的LinkedList 可以快速删除第一个元素,但通常非常慢。

所有这些类的源代码都是免费的,而且不太复杂。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2014-11-22
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多