Метод клонирования в списках в Java - это мелкое копирование или глубокое копирование?

Как я понимаю, когда я использую метод клонирования, указанный для List, или если я использую конструктор копирования для списка, мне нужно получить поверхностную копию списка:

 ArrayList<String> a = new ArrayList<>();
 a.add(new String("dog"));
 a.add(new String("cat"));
 ArrayList<String> b = new ArrayList<String>(a);
 //ArrayList<String> b = (ArrayList<String>)a.clone();

b.remove(0);
Iterator<String> iter = a.iterator();
while(iter.hasNext()){
    System.out.println(iter.next());
}
Iterator<String> iter2 = b.iterator();
while(iter2.hasNext()){
    System.out.println(iter2.next());
} 



out put:
dog
cat
cat

Если b мелкая копия a, то почему при удалении элемента из b он не удаляется из a?

1 ответ

Так как b это отдельный список, который был создан путем копирования элементов в a,

Тот факт, что это мелкая копия, означает, что предметы внутри a не клонируются; они относятся к одним и тем же объектам. Глубокая копия будет означать, что и список, и элементы внутри списка будут клонированы. Однако в обоих случаях сам список клонируется, поэтому теперь это два разных объекта.

Другие вопросы по тегам