gpt4 book ai didi

java - 数组和 java.util.Collection 实现在内存方面的差异

转载 作者:行者123 更新时间:2023-12-01 17:01:25 25 4
gpt4 key购买 nike

当我们说数组内存分配时,它是指在堆区域中分配的连续内存块。因此,假设数组中有100k个元素,JVM将在堆区域中查找100k连续内存块是空闲的。

根据理论,java Collection 的情况并非如此。集合中的所有元素都会通过hashcode分配在堆内存中,可能是连续的内存块,也可能不是连续的内存块。

现在我很困惑 Collection 如何以这种方式工作,因为 Collection 底层实现仅使用数组(例如 ArrayList),这意味着数组的所有属性也对 Collection 有效。

需要帮助来澄清这一点。

最佳答案

如果 Collection 实现是 ArrayList ,那么与 Object[] 相比实际上没有任何开销,其他实现可能会占用更多的内存来保存相同数量的元素。例如。 LinkedList 的每个元素都有一个节点:

private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;

Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

元素的内存大约是 Object[] 的 5 倍

关于java - 数组和 java.util.Collection 实现在内存方面的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527103/

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