Если у меня есть ArrayList объектов в Java, является ли базовая реализация действительно просто массивом ссылок на объекты? Я создаю этот метод:Разница в размере массива
//method returns all combinations of Objects
public ArrayList<ArrayList<Object>> getAllCombinations(ArrayList<Object> allObjects){
}
Как я начал думать об этой проблеме, я подумал, если я мог бы просто вернуть ArrayList<ArrayList<Integer>>
где Интс были позиции в AllObjects (по существу, думая, что это будет использовать значительно меньше памяти). Но потом я начал думать, что каждое значение реализации массива просто указывает на расположение памяти объектов в и что массив не создает новые объекты для каждого созданного мной ArrayList (который определенно будет использовать больше памяти). Таким образом, на самом деле, он будет использовать одну и ту же память, если я просто реализую метод, упомянутый выше, не так ли?
Я думаю, что нужно понимать распределение памяти в Java немного лучше ...
Хотя я вижу то, что вы делаете, по крайней мере, немного желательно сохранить, что каждый элемент использует только 4 байта. Хотя верно, что ссылка только такая большая, это не учитывает тот факт, что пространство должно быть выделено из кучи для каждого из объектов. – scottb
@scottb Да, очевидно, что op, похоже, обеспокоен тем, что помещение объектов в arraylist удвоит размер, который они используют. Я попытался объяснить, что даже большой объект добавит 4 байта «использования памяти» при вводе в список. (Это упрощение, поскольку базовый массив не изменяется при каждом добавлении) – assylias
@scottb вы могли бы объяснить, что вы имеете в виду о распределении из кучи для каждого объекта? – sunrize920