Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Raquel en 12 de Septiembre 2021, 22:51

Título: Java diferencia entre ArrayList y LinkedList programa para guardar ubicaciones
Publicado por: Raquel en 12 de Septiembre 2021, 22:51
Hola, agradecería ayuda para resolver este ejercicio.

Una ubicación tiene una coordenada en X y una coordenada en Y.

Cree una GUI para agregar ubicaciones. Las ubicaciones se guardan en una LinkedList.

Ordene las ubicaciones de acuerdo al orden natural: coordenada X asc y coordenada Y asc.
Muestre la ubicación con el mayor valor en la coordenada Y.
Título: Re: Hola me podrian ayudar no entiendo muy bien linkedList
Publicado por: Kabuto en 13 de Septiembre 2021, 18:28
Hola.
Una LinkedList es casi lo mismo que un ArrayList, solo que tiene mejor rendimiento insertando elementos, pero peor rendimiento haciendo búsquedas entre sus elementos.

Más info aquí (https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=605:interface-list-clase-linkedlist-api-java-ejercicio-diferencias-entre-arraylist-y-linkedlist-codigo-cu00921c&catid=58&Itemid=180)

El programa te pide algo así.

Primero una clase Ubicacion, que sea capaz de compararse mediante sus coordenadas para ordenarse de forma ascendente:
Código: [Seleccionar]
package ubicacionLinkedList;

public class Ubicacion implements Comparable<Ubicacion>{

private int coordX;
private int coordY;

public Ubicacion(int cX, int cY) {
coordX = cX;
coordY = cY;
}

public int getCoordX() {
return coordX;
}

public int getCoordY() {
return coordY;
}

@Override
public String toString() {
return String.format("[X: %d / Y: %d]", coordX, coordY);
}

@Override
public int compareTo(Ubicacion otraUbicacion) {
if (coordX != otraUbicacion.coordX)
return Integer.compare(coordX, otraUbicacion.coordX);
else
return Integer.compare(coordY, otraUbicacion.coordY);
}

}

Luego, simplemente hay que añadir Ubicaciones a una LinkedList y mantenerlas ordenadas.
Finalmente buscar cuál es la que tiene mayor valor en la coordenada Y.

Lo pide con GUI, no tengo tiempo ahora, pero en modo consola vendría a ser algo como esto:
Código: [Seleccionar]
public class Test {

public static void main(String[] args) {

var ubicaciones = new LinkedList<Ubicacion>();
var teclado = new Scanner(System.in);
char continuar = 's';

while (continuar == 's') {
System.out.println("Nueva Ubicacion....");
System.out.println("Indique coordenada X: ");
int cX = Integer.parseInt(teclado.nextLine());
System.out.println("Indique coordenada Y: ");
int cY = Integer.parseInt(teclado.nextLine());
//Agregamos Ubicacion y las ordenamos
ubicaciones.add(new Ubicacion(cX, cY));
ubicaciones.sort(null);
//Las mostramos
System.out.println("\nUbicaciones registradas:");
for (Ubicacion ubi: ubicaciones)
System.out.println(ubi);

System.out.println("\n¿Continuar?[s/n]");
continuar = teclado.nextLine().toLowerCase().charAt(0);
}

//Buscamos coordenada con mayor Y
//Para comparar comenzamos con el mínimo valor posible para Y
Ubicacion mayorY = new Ubicacion(0, Integer.MIN_VALUE);

for (Ubicacion ubi: ubicaciones) {
if (ubi.getCoordY() > mayorY.getCoordY()) {
mayorY = ubi;
}
}

System.out.println("\nUbicacion con mayor Y:\n" + mayorY);

System.out.println("\n\n\t\tFIN DE PROGRAMA");
teclado.close();

}

}

En pantalla veremos que las Ubicaciones se van ordenando correctamente, y que al final muestra cuál tiene mayor valor Y

Citar
Nueva Ubicacion....
Indique coordenada X:
5
Indique coordenada Y:
5

Ubicaciones registradas:
[X: 5 / Y: 5]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
3
Indique coordenada Y:
3

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 5 / Y: 5]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
8
Indique coordenada Y:
8

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 5 / Y: 5]
[X: 8 / Y: 8]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
3
Indique coordenada Y:
9

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 3 / Y: 9]
[X: 5 / Y: 5]
[X: 8 / Y: 8]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
8
Indique coordenada Y:
1

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 3 / Y: 9]
[X: 5 / Y: 5]
[X: 8 / Y: 1]
[X: 8 / Y: 8]

¿Continuar?[s/n]
n

Ubicacion con mayor Y:
[X: 3 / Y: 9]


      FIN DE PROGRAMA

Y ya está. Según entiendo, esto es lo que se pide, pero mediante una GUI.

Un saludo.