gpt4 book ai didi

java - ArrayList 中存储多种数据类型时,ArrayList.get() 的性能是否受到影响?

转载 作者:行者123 更新时间:2023-11-30 06:43:42 24 4
gpt4 key购买 nike

我在看 THIS回答一个流行的 Java 问题。我知道 X 数据类型的 ArrayList 的好处是 get(5) 应该是瞬时的,因为找到第 5 个元素只是在数组中向前移动 5 个数据类型单位的问题您实际上必须访问任何数据。 LinkedList 需要访问每个节点的数据以找到下一个节点的位置,并继续此过程直到达到第 5 步。这就是 ArrayList 在检索数据方面优于 LinkedList 的原因。

但是,如果数据类型的大小是可变的呢?如果我声明一个带有 Object 类型参数的 ArrayList,以便我可以在 ArrayList 中添加一个 char(1 个字节)和一个 int(4 个字节),会怎样? ArrayList 如何知道下一个元素在哪里,因为它不能只向前行进 (sizeOfDatatype * steps) 直到到达目标?它会将数据存储为可用的最大数据类型,例如对齐方式吗?

最佳答案

经过几个小时的搜索,我找到了 THIS问题。它有点回答我的问题,但只是部分回答。此答案旨在为我的问题提供完整的答案。

~

问题是建立在 ArrayList 存储对象值(或原始数据类型的值)的错误前提之上的。虽然看起来不像,但 ArrayList 不存储值,它们存储对象引用。请注意如何可以 add(int i)add(char c),但不能声明一个带有 int 作为类型参数的 ArrayList?原因是因为 ArrayLists 正在存储对象引用 essentially a pointer ,并遍历这些指针(所有指针都具有相同的大小,因为它们都是指针)。原始数据类型,例如 int,不是引用类型,它们是原始类型,因此不允许作为类型参数。由于 Autoboxing,您仍然可以使用 int 作为 add() 的参数,但这只是为了方便。

所以不,在 ArrayList 中存储多种数据类型时,get() 的性能不会受到影响,因为您只存储对对象的引用。

关于java - ArrayList 中存储多种数据类型时,ArrayList.get() 的性能是否受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51852948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com