2016-05-09 15 views
-2

Ich habe folgenden Code:Gibt listIterator.next() tiefe Kopie oder flache Kopie zurück?

ListIterator iterator = resultSet.listIterator(); 
while (iterator.hasNext()) { 
    Object[] data = (Object[]) iterator.next(); 

} 

Ich möchte nur wissen, ob iterator.next() -Methode tiefe Kopie des nächsten Elements in der resultSet oder flach zurückkehrt?

+0

Das hängt davon ab, welcher Typ von 'resultSet' ist. – Eran

+0

@Eran Ich denke, es ist ziemlich sicher anzunehmen, dass 'resultSet' eine' List' ist. – dasblinkenlight

+1

@dasblinkenlight Aber wir können nicht annehmen, welche List-Implementierung es ist (obwohl keine Implementierung, die ich kenne, eine tiefe Kopie zurückgibt, bedeutet das nicht, dass es keine solchen Implementierungen gibt). – Eran

Antwort

2

Angenommen, dass resultSet eine List Implementierung aus der Standard-Java-Bibliothek ist, ist die Antwort auf die Frage "tiefe oder flache Kopie" "weder". ListIterator s von List Klassen in der Standard-Java-Bibliothek geben keine Kopie zurück; Sie gibt eine Referenz zurück, so dass Sie auf das Objekt zugreifen, das in der List gespeichert ist, keine Kopie davon.

Da Java-Arrays veränderbar sind, werden alle Änderungen, die Ihre Schleife an data vornimmt, auf dem in der Liste gespeicherten Array Object[] ausgeführt.

Wie Eran merkt richtig in seinem Kommentar, da List und ListIterator nur Schnittstellen sind, ist es durchaus denkbar ist mit einer Implementierung zu entwickeln, die Kopien von Listenelementen anstatt Verweise auf tatsächlichen Elemente zurückgibt. Diese Kopien können je nach Ihrer Implementierung tief oder oberflächlich sein. Listenimplementierungen, die von der Java-Bibliothek bereitgestellt werden, geben jedoch immer Verweise auf tatsächliche Listenelemente zurück.