è possibile realizzare in java quella che era in C++ una lista dinamica a puntatori???
è possibile realizzare in java quella che era in C++ una lista dinamica a puntatori???
basta fare un qualcosa del genere:
Codice PHP:
private class Node { /*nodo della lista: contiene l'elemento e l'indirizzo del successivo */
Object key;
Node next;
Node(Object u) {
key = u;
next = null;
}
}
La lista quindi sarà una cosa del tipo:
Più i vari metodi per l'inserimento, rimozione... ecc...Codice PHP:
public class Lista{
private Node head; //inizio della lista
private int nOggetti; //numero elementi (supporto)
…
public Lista() {
head = null;
nOggetti = 0;
}
}
Al mio segnale... scatenate l'inferno!
grazie r@ve m@ster..ma x quanto riguarda l'eliminazione dei nodi cosa potresti consigliarmi??java non utilizza un meccanismo detto Garbage Collector??
Ma il garbage collector è un meccanismo che tiene traccia delle locazioni di memoria utilizzate e le libera solo quando non sono effettivamente più necessarie. Java non permette a un programmatore di accedere ad una qualsiasi locazione di memoria come avviene in altri linguaggi. In Java non esistono puntatori con le stesse caratteristiche di quelli del C/C++. Il Garbage Collector "parte" in automatico quando la virtual machine si rende conto che quella zona di memoria non è più utile, quindi non puoi (in realtà sarebbe possibile ma è sconsigliato) richiamare il garbage collector come invece faresti in C.
per la cancellazione devi crearti un metodo apposito. Ad esempio, con la mia soluzione (che ho usato tempo fa ma che reperii in internet...non ricordo dove) io ho fatto:
Codice PHP:
public void cancella(int k) throws IllegalArgumentException {
if (k < 0 || k >= nOggetti) //accedo ad un indice della lista inesistente
throw new IllegalArgumentException();
else {
if (nOggetti == 1) { //è l'unico elemento quindi coincide con la head
head = null;
} else {
if (k == 0) { //è il primo elemento
head = head.next; //pongo head uguale al nodo puntato da head stesso
} else { //è un elemento generico
//posizionati nell’elemento precedente a quello da cancellare
Node indice = head;
for (int i=0 ; i < k-1; i++)
indice = indice.next;
//cancello, facendo puntare "indice" al nodo puntato dal suo successivo
indice.next= indice.next.next;
}
}
nOggetti--;
}
}
Al mio segnale... scatenate l'inferno!