¿Cuál es la mejor manera de hacer una lista vinculada en Java?¿Cómo creo una estructura de datos de lista enlazada en Java?
Respuesta
La solución obvia a los desarrolladores familiarizados con Java es utilizar el clase LinkedList ya previstos en java.util. Digamos, sin embargo, que quería hacer su propia implementación por alguna razón. Aquí hay un ejemplo rápido de una lista vinculada que inserta un nuevo enlace al principio de la lista, lo elimina del principio de la lista y recorre la lista para imprimir los enlaces que contiene. Mejoras a esta aplicación incluyen lo que es una lista de doble ligado, añadiendo métodos para inserción y eliminar desde el medio o al final, y mediante la adición de obtener y ordenar métodos también.
Nota: En el ejemplo, el objeto Enlace realmente no contiene otro objeto Enlace - nextLink es en realidad sólo una referencia a otro enlace.
class Link {
public int data1;
public double data2;
public Link nextLink;
//Link constructor
public Link(int d1, double d2) {
data1 = d1;
data2 = d2;
}
//Print Link data
public void printLink() {
System.out.print("{" + data1 + ", " + data2 + "} ");
}
}
class LinkList {
private Link first;
//LinkList constructor
public LinkList() {
first = null;
}
//Returns true if list is empty
public boolean isEmpty() {
return first == null;
}
//Inserts a new Link at the first of the list
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
link.nextLink = first;
first = link;
}
//Deletes the link at the first of the list
public Link delete() {
Link temp = first;
if(first == null){
return null;
//throw new NoSuchElementException(); // this is the better way.
}
first = first.nextLink;
return temp;
}
//Prints list data
public void printList() {
Link currentLink = first;
System.out.print("List: ");
while(currentLink != null) {
currentLink.printLink();
currentLink = currentLink.nextLink;
}
System.out.println("");
}
}
class LinkListTest {
public static void main(String[] args) {
LinkList list = new LinkList();
list.insert(1, 1.01);
list.insert(2, 2.02);
list.insert(3, 3.03);
list.insert(4, 4.04);
list.insert(5, 5.05);
list.printList();
while(!list.isEmpty()) {
Link deletedLink = list.delete();
System.out.print("deleted: ");
deletedLink.printLink();
System.out.println("");
}
list.printList();
}
}
también podría fácilmente mejorar este código para usar genéricos para el tipo de datos en lugar de almacenar un int y un doble. – shsteimer
@shsteimer: definitivamente, pero dado que el único buen uso de este código es demostrar la técnica, no ayudaría a nadie. Solo difundiría la idea básica. –
No es un buen enfoque OO tener 'public Link nextLink' y operar fuera de la clase. Podría ser respetable cuando 'Link' sería una clase interna de' LinkList'. Es otro grupo de código escrito como Java era solo otra versión de c. – Bart
Java tiene una implementación LinkedList, que es posible que desee retirar. Puede descargar el JDK y sus fuentes en java.sun.com.
Use java.util.LinkedList. De esta manera:
list = new java.util.LinkedList()
Es mucho mejor usar java.util.LinkedList, porque es probablemente mucho más optimizado, que el que se va a escribir.
Y funcionará la primera vez. –
La lista vinculada anterior muestra en dirección opuesta. Creo que la aplicación correcta del método de inserción debe ser
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
if(first==null){
link.nextLink = null;
first = link;
last=link;
}
else{
last.nextLink=link;
link.nextLink=null;
last=link;
}
}
Agregar nuevo al final a menos que se indique lo contrario. :-) –
//slightly improved code without using collection framework
package com.test;
public class TestClass {
private static Link last;
private static Link first;
public static void main(String[] args) {
//Inserting
for(int i=0;i<5;i++){
Link.insert(i+5);
}
Link.printList();
//Deleting
Link.deletefromFirst();
Link.printList();
}
protected static class Link {
private int data;
private Link nextlink;
public Link(int d1) {
this.data = d1;
}
public static void insert(int d1) {
Link a = new Link(d1);
a.nextlink = null;
if (first != null) {
last.nextlink = a;
last = a;
} else {
first = a;
last = a;
}
System.out.println("Inserted -:"+d1);
}
public static void deletefromFirst() {
if(null!=first)
{
System.out.println("Deleting -:"+first.data);
first = first.nextlink;
}
else{
System.out.println("No elements in Linked List");
}
}
public static void printList() {
System.out.println("Elements in the list are");
System.out.println("-------------------------");
Link temp = first;
while (temp != null) {
System.out.println(temp.data);
temp = temp.nextlink;
}
}
}
}
- 1. Lista enlazada de listas enlazadas en Java
- 2. Lista enlazada simultánea sin cerradura en Java
- 3. Lista enlazada a Java: método de adición
- 4. ¿Ordenar una estructura de lista enlazada en una consulta SQL o LINQ?
- 5. Transmisión de lista enlazada multiproceso
- 6. tratar con gran variedad de lista enlazada
- 7. ¿Cómo implementar una lista doblemente enlazada en PHP?
- 8. C++ Lista enlazada comportamiento
- 9. ¿Cómo mostrar la estructura de datos planos en una estructura de datos jerárquica (Java)?
- 10. ¿Java tiene una estructura de datos "LinkedConcurrentHashMap"?
- 11. Lista enlazada de Scala stackoverflow
- 12. Codificando una función para copiar una lista enlazada en C++
- 13. Hacer que una lista enlazada sea segura
- 14. ¿Cómo creo una tabla hash en Java?
- 15. Creación de un constructor de copia de una lista enlazada
- 16. Brushup de estructura de datos (Java)
- 17. ¿Cómo creo una lista en Oz?
- 18. ¿Hay una biblioteca predefinida de lista enlazada en C++?
- 19. Java pregunta estructura de datos
- 20. Lista de Javascript como estructura de datos?
- 21. ¿La lista vinculada es una ADT o es una estructura de datos, o ambas?
- 22. Cómo convertir lista enlazada a una matriz usando `toArray()`?
- 23. JAVA - La mejor estructura de datos adecuada
- 24. Manejar una gran estructura de datos en Java
- 25. ¿Cómo creo una lista de diccionarios en .NET?
- 26. ¿Cómo creo una lista de vectores en Rcpp?
- 27. ¿Cómo creo una lista de matriz multidimensional en C#?
- 28. ¿Cómo creo una lista de lambdas de Python (en una lista de comprensión/para ciclo)?
- 29. Lista enlazada que contiene otras listas enlazadas y gratuita
- 30. Lista doblemente enlazada en un lenguaje de programación puramente funcional
La mejor manera de construir una lista enlazada es utilizar el construido en la lista enlazada. No reescribas las clases integradas. –
esta pregunta es legítima y muy constructiva para la discusión de los programadores – anshulkatta