Предполагается, что списки создаются следующим образом:
List<Integer> integers = new ArrayList<>();
integers.add(0);
integers.add(1);
// ...
List<String> strings = new ArrayList<>();
strings.add("0");
strings.add("1");
// ...
Есть два уровня ответа на этот вопрос.
Во-первых, нужно знать потребление памяти Integer
и String
.
Итак, String
с одним символом занимает 40 байтов (32 в Java 8).
Integer
занимает 16 байтов.
На этом уровне список строк занимает больше памяти, чем список целых чисел.
На втором уровне вы должны знать, что строковые литералы интернированы, и для бокса int
с Integer.valueOf
используется кэш для значений между -128
и, по крайней мере, 127
. Так что в основном add("0")
и add(0)
будут использовать кэшированные объекты, и можно сказать, что дополнительная память не используется.
Таким образом, в зависимости от того, рассматриваете ли вы пул строк / целочисленный кеш, ответ может быть либо «список строк занимает больше памяти», либо «оба списка занимают одинаковое количество памяти».
Если это вопрос интервью, вам, вероятно, следует дать оба ответа.
пс. Я лично не знал бы размер String
или Integer
вне головы, но предположил бы String
, чтобы взять больше памяти.