0

如果我在 Java 中有一个对象数组列表,那么底层实现真的只是一个对象引用数组吗?我正在创建这个方法:

//method returns all combinations of Objects
public ArrayList<ArrayList<Object>> getAllCombinations(ArrayList<Object> allObjects){

}

当我开始考虑这个问题时,我想知道我是否可以返回一个ArrayList<ArrayList<Integer>>整数在 allObjects 中的位置(本质上认为这会大大减少内存的使用)。但是后来我开始认为,数组实现的每个值都只是指向 中对象的内存位置,并且数组并没有为我正在创建的每个 ArrayList 创建新对象(这肯定会使用更多内存)。所以实际上,如果我只是实现我上面提到的方法,它会使用大约相同的内存,对吧?

我想我需要更好地理解Java的内存分配......

4

2 回答 2

1

是的,数组或数组列表只包含对对象的引用,而不是对象本身。因此,无论底层对象的大小如何,数组中的每个项目都使用 4 个字节的内存(在 32 位机器上)。

所以保持简单并返回任何有意义的东西。

于 2013-05-30T23:27:01.967 回答
1

你说得对:你的元素ArrayList只会指向对象(除非你明确地复制它们)。因此,两种实现都将使用与您所说的大致相同的内存。

顺便说一句,如果您想更改对象的状态,这是需要考虑的重要事项,因为它们在它们起源的旧数组中似乎也发生了变化。

于 2013-05-30T23:27:14.437 回答