Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

421
Visualizações
Java: ¿cómo iterar en una LinkedList de forma ordenada?

¿Es posible recuperar los objetos de una LinkedList sin ordenarlos?

 class MyClass<T> implements Iterable<T> { private LinkedList<T> myList = new LinkedList<>(); @Override public Iterator<T> iterator() { return new Iterator<T>() { @Override public boolean hasNext() { return false; } @Override public T next() { // SHOULD RETURN THE ELEMENTS OF MYLIST IN A SORTED WAY return null; } }; } }

En este caso, podemos suponer que los objetos de tipo T tienen un campo Integer para ordenar

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

No es posible, a menos que cree métodos adicionales para ordenar 'sobre la marcha' o almacene una lista ordenada previamente en otro objeto (supongo que no desea cambiar el orden de la lista original).

Ambos métodos tienen costos:

  • Puede mantener un índice del índice 'actual' y encontrar el siguiente índice mirando la lista completa, pero esto cuesta CPU
  • Puede crear una copia privada de la lista y ordenarla, y devolver esta nueva lista, pero cuesta más memoria y debe mantener la nueva lista actualizada en caso de que la lista original tenga valores cambiados.
over 4 years ago · Santiago Trujillo Relatório

0

Respuesta corta: no.

Ordenar es encontrar un mínimo/máximo de ejecución, no hay forma de que pueda encontrarlo sin revisar cada elemento de la lista y, por lo tanto, necesitaría que todo estuviera ordenado de alguna manera, una forma de hacerlo es a través de un Heap que significa memoria adicional si no desea ordenar la lista en sí.

 @Override public Iterator<T> iterator() { PriorityQueue<T> heap = new PriorityQueue<>(list); return new Iterator<T>() { @Override public boolean hasNext() { return !heap.isEmpty(); } @Override public T next() { return heap.poll(); } }; }
over 4 years ago · Santiago Trujillo Relatório

0

Si el tipo T implementa Comparable<T> , puede hacer esto.

 static class MyClass<T extends Comparable<T>> implements Iterable<T> { private LinkedList<T> myList = new LinkedList<>(); @Override public Iterator<T> iterator() { return myList.stream().sorted().iterator(); } } public static void main(String[] args) { MyClass<Integer> obj = new MyClass<>(); obj.myList.add(2); obj.myList.add(0); obj.myList.add(1); for (int i : obj) System.out.println(i); System.out.println(obj.myList); }

producción:

 0 1 2 [2, 0, 1]

Alternativamente, puede pasar un comparador a través del constructor.

 static class MyClass<T> implements Iterable<T> { private LinkedList<T> myList = new LinkedList<>(); private final Comparator<T> comparator; public MyClass(Comparator<T> comparator) { this.comparator = comparator; } @Override public Iterator<T> iterator() { return myList.stream().sorted(comparator).iterator(); } }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda