Java - Ayuda con las listas enlazadas

 
Vista:
Imágen de perfil de William

Ayuda con las listas enlazadas

Publicado por William (1 intervención) el 07/04/2020 01:14:26
Hola. Soy William y estoy empezando a programar en Java y es la primera vez que intento entender un lenguaje de programación orientado a objetos. Estoy creando una estructura de datos tipo Lista Enlazada y tengo una duda respecto a la clase que hace referencia a los nodos de los objetos de la lista.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class ListaEnlazada {
 
	protected Nodo primero;
 
	public ListaEnlazada() {
		primero = null;
	}
 
	public ListaEnlazada agregarInicio(int dato) {
		Nodo nuevo = new Nodo(dato);
		nuevo.ref = primero;
		primero = nuevo;
		return this;
	}
 
	public void agregarFinal() {}
 
	public void buscar() {}
 
	public void eliminar() {}
 
	public void verLista() {
		Nodo nodov;
		nodov = primero;
		while(nodov!=null) {
			System.out.println(nodov.dato);
			nodov = nodov.ref;
		}
	}
 
 
 
 
}

Como veis, usando la función agregarInicio(int dato), creo un objeto llamado nuevo de clase Nodo (esta clase posee un dato int y un objeto clase Nodo que es la referencia al siguiente objeto de la lista). En teoria este nuevo nodo creado es un nodo único en la lista y tiene otro objeto nodo único que sería la referencia al siguiente objeto de la lista único también. Mi duda es que, cada vez que ejecute esa función no estaría reescribiendo el objeto nuevo? Es decir, tengo un nodo con una referencia y al usar esa función no estaría simplemente sobreescribiendo ese mismo objeto? Se que en la práctica funciona pero mi mente acostumbrada a la programación estructurada no me deja entender porque hay varios objetos clase Nodo con el mismo nombre pero sin embargo "¿ocupar lugares en la memoria distintos?". Gracias por la atención y un saludo :).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.777
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con las listas enlazadas

Publicado por Rodrigo (480 intervenciones) el 07/04/2020 12:20:49
Intentare explicar con un ejemplo:

Imagina que tienes un papel con la direccion de una casa.
Si quemas el papel, se quema la casa?

Espero que la respuesta que hayas dado sea "No". (a menos que haya brujeria o algo parecido).

El papel es una referencia a la casa. No es la casa. Nada que le pase al papel, le pasa a la casa.
El papel podria borrarse y tener otra referencia a otra casa. La casa original no se pierde por esto.
El que un papel tenga una referencia y se cambie por otra, no realiza accion alguna respecto a la casa.

Ahora volviendo a Java y las referencias ahi.

Cuando haces

1
Nodo nuevo = new Nodo(dato);
estas haciendo 2 cosas: creando un Nodo (una casa) y anotando en una referencia la direccion de ella.

"nuevo" es un papel con una direccion.

El operador "." es el operador transportador.
Dada una referencia (a la izquierda del punto), se dirige a lo referenciado (va a la casa anotada en el papel) y modifica o accede a los valores almacenados en esa casa.
Digamos que si quieres pintar la casa, tienes que usar el operador "." para llegar a ella y pintarla.

Cuando haces

1
primero. = nuevo

estas copiando las referencias, de un papel a otro.

Resumiendo:

1
2
3
4
5
6
Nodo nuevo = new Nodo(dato);  // creas un nodo, guardas una referencia
nuevo.ref = primero;  // vas al nodo recien creado,
                      // modificas el campo "ref" de el,
                      // y copias lo que "primero" tenga
primero = nuevo;  // y ahora primero se olvida de lo que tenia
                  // y anota la referencia que tiene "nuevo"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar