nie jestem pewien, czy to będzie działać jako „wskaźnik” do ArrayList czy to stworzy cały nowy obiekt listy danych
Gdy użyjesz new
, to będzie stworzyć markę nową instancję z ArrayList
(o to właśnie prosiłeś). Ale będzie to , a nie również automatycznie tworzyć kopie jego elementów (co moim zdaniem jest tym, czego szukasz). Oznacza to, że jeśli zmienisz zmienny obiekt na nowej liście, zmieni się on również na oryginalnej liście, jeśli nadal jest w pobliżu. Dzieje się tak, ponieważ na liście znajdują się tylko odniesienia (rodzaj, ale nie dokładnie wskaźniki) do Object
w nich samych, a nie same rzeczywiste Object
.
Na przykład:
Person person = new Person("Rob"); // create a new Object
List<Person> myList = new ArrayList<Person>();
myList.add(person);
// Create another list accepting the first one
List<Person> myList2 = new ArrayList<Person>(myList);
for(Person p : myList2) {
p.setName("John"); // Update mutable object in myList2
}
person = new Person("Mary"); // stick another object into myList2
myList2.add(person);
for(Person p : myList2) {
System.out.println(p.getName()); // prints John and Mary as expected
}
for(Person p : myList) {
System.out.println(p.getName()); // prints only one result, John.
}
Więc widać, że dwie same Listy mogą być modyfikowane niezależnie, ale kiedy użyć konstruktora zaakceptowaniem innego List
, jak będzie zawierać odniesienia do tych samych Person
przypadkach, kiedy stan tych obiektów zmienia się na jednej Liście, zmienią się również w drugiej (podobnie jak wskaźniki).
Nie będzie wykonywać kopii elementów. (I imho opionion, co byłoby dziwne.) – esej
Możesz samodzielnie sprawdzić kod źródłowy ArrayList. Jest on dołączony do twojego JDK. –