Довольно понятно: мне нужно изменить полученный ArrayList, но я хочу, чтобы оригинал не изменился.
Я знаю, что это очень просто, и я не уверен, почему я не знаю окончательного ответа.Думаю, лучше поздно, чем никогда.
У вас будет ссылка на оригинал ArrayList.
ArrayList
. Вы можете создать мелкую копию списка с помощью clone().
clone()
Посмотрите на этот вопрос , если вам нужна глубокая копия.
Если вы хотите изменить список, но не изменять оригинал, вам не следует оперировать списком, который вы получили в аргументах метода, потому что оперируете ссылками. Лучше использовать что-то вроде этого:
public void modifyList(List myList) { myList.add("aaa"); // original *will* be modified List modifiable = new ArrayList(myList); modifiable.add("bbb"); // original will *not* be modified - only the copy }
Все в java будет ссылкой по умолчанию.Так что да, изменение возвращенного массива изменит исходный.
Чтобы избежать этой проблемы, вам нужно создать копию исходного.Для этого используйте метод .clone ().
Это будет тот же ArrayList. Если вам нужна копия, вам придется скопировать ее самостоятельно. Не обязательно легко, если ArrayList содержит сложные объекты!