Chiarificazione dell'elenco collegato

0

Questa è una domanda abbastanza semplice, ma io sono nuovo di java.

L'elenco collegato trovato in java.util.LinkedList.

Ho visto altrove che Java non usa i puntatori ...

Quando creo una nuova lista e aggiungo nuovi elementi, l'elenco contiene riferimenti ai dati e agli elementi successivi / precedenti o contiene anche l'oggetto stesso.

    
posta sammy_123 20.03.2014 - 04:11
fonte

4 risposte

3

In Java hai primitive (int, long, ecc.) e oggetti. Gli oggetti sono riferimenti (puntatori) a dati complessi.

Java passa sempre i valori; così all'interno della tua lista avrai i valori effettivi di ciò che hai inserito. BUT: Poiché gli oggetti sono riferimenti ai dati, i valori passati saranno i riferimenti, non i dati stessi.

Risultato pragmatico: metti l'oggetto A in una lista e cambia i suoi dati da qualche parte nel tuo codice. L'oggetto A sarà ancora nella tua lista (non hai cambiato A ma i suoi dati) ma l'A nel tuo elenco rifletterà le modifiche che hai apportato da qualche altra parte.

Car a = new Car();
List myList = new LinkedList();
myList.add(a);
a.driveHome();
Car carFromList = myList.getFirst();
carFromList.isDrivenHome(); // true
    
risposta data 02.04.2014 - 09:34
fonte
1

Puoi controllare Implementazione LinkedList di OpenJDK su GrepCode . La classe LinkedList contiene un riferimento a Entry denominato header , che contiene riferimenti a due ulteriori oggetti Entry per gli elementi next e previous nell'elenco.

    
risposta data 20.03.2014 - 19:21
fonte
0

Per rispondere in modo specifico: nota che java.util.LinkedList definisce una lista doppiamente collegata.

L'elenco ha due variabili membro first e last tale riferimento ("point at") al primo e all'ultimo nodo. I nodi di elenco sono di tipo Entry<T> , dove T è il tipo di oggetti che stai inserendo.

Ogni nodo list o Entry contiene quindi:
T data : l'oggetto effettivo (oggetto) inserito
Entry<T> next : un riferimento a ("puntato a") il nodo successivo (null se l'ultimo )
Entry<T> previous : un riferimento a ("che punta a") il nodo precedente (null se prima)

Ad esempio, la lista (A, B, C, D) è rappresentata come segue:

/   \  ->  /   \  ->  /   \  ->  /   \
| A |      | B |      | C |      | D |
\   /  <-  \   /  <-  \   /  <-  \   /
  ^                                ^
first                            last
    
risposta data 01.04.2014 - 23:35
fonte
0
  • LinkedList utilizza l'indice per memorizzare elementi
  • Gli elementi sono punti (collegati) tra loro

Ci sono 3 tipi di elenco collegato

elenco 1.lyly link = ogni nodo punta al nodo successivo. (X) --- > (y) --- > (z) --- > nulla

2. elenco collegato in modo indipendente = ciascun nodo punta al nodo successivo e precedente. (X) < - > (y) < - > (z)

Elenco di collegamenti 3.circularly. = ogni nodo punta al nodo successivo (come gli elenchi collegati singolarmente) ultimo nodo e nodo del pugno collegato                                             (X) --- > (y) --- > (z) --- > (x)

    
risposta data 06.08.2014 - 07:10
fonte

Leggi altre domande sui tag