arrayList大小的差异

时间:2013-05-30 23:23:24

标签: java

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

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

}

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你做对了:ArrayList的元素只会指向对象(除非你明确地复制它们)。所以这两种实现都会使用与你说的相同的内存。

这是一个重要的考虑因素,如果你想改变对象的状态,因为它们在它们起源的旧数组中也会被改变。