example - hashset java 8
¿Cómo ordenar un HashSet? (12)
Agregue todos sus objetos al TreeSet
, obtendrá un Set ordenado. A continuación se muestra un ejemplo crudo.
HashSet myHashSet = new HashSet();
myHashSet.add(1);
myHashSet.add(23);
myHashSet.add(45);
myHashSet.add(12);
TreeSet myTreeSet = new TreeSet();
myTreeSet.addAll(myHashSet);
System.out.println(myTreeSet); // Prints [1, 12, 23, 45]
Para las listas, utilizamos el método Collections.sort(List)
. ¿Qué pasa si queremos ordenar un HashSet
?
Este simple comando hizo el truco para mí:
myHashSet.toList.sorted
Usé esto en una declaración impresa, por lo que si necesita persistir realmente en el pedido, es posible que necesite usar TreeSets u otras estructuras propuestas en este hilo.
La forma de Java 8 para ordenarlo sería:
fooHashSet.stream()
.sorted(Comparator.comparing(Foo::getSize)) //comparator - how you want to sort it
.collect(Collectors.toList()); //collector - what you want to collect it to
* Foo::getSize
es un ejemplo de cómo ordenar el HashSet de YourItem de forma natural por tamaño.
* Collectors.toList()
va a recolectar el resultado de clasificar en una lista. Necesitará capturarlo con List<Foo> sortedListOfFoo =
Los elementos en HashSet no se pueden ordenar. Cada vez que pones elemento en HashSet, arruinará todos los cubos. Lo bueno de esto es la eficiencia en el rendimiento.
TreeSet clasificará todos los elementos automáticamente cada vez que inserte un elemento.
Tal vez, lo que estás tratando de hacer es ordenar solo una vez. En ese caso, TreeSet no es la mejor opción porque necesita determinar la colocación de nuevos elementos añadidos todo el tiempo.
La solución más eficiente es usar ArrayList. Crea una nueva lista y agrega todos los elementos, luego ordénala una vez. Si desea conservar solo elementos únicos (eliminar todos los duplicados como lo hace el conjunto, luego poner la lista en un LinkedHashSet, retendrá el orden que ya ha ordenado)
List<Integer> list = new ArrayList<>();
list.add(6);
list.add(4);
list.add(4);
list.add(5);
Collections.sort(list);
Set<Integer> unique = new LinkedHashSet<>(list); // 4 5 6
// The above line is not copying the objects! It only copies references.
Ahora, ha obtenido un conjunto ordenado si lo quiere en una lista y luego conviértalo en una lista.
No podemos decidir que los elementos de un HashSet se ordenarán automáticamente. Pero podemos ordenarlos convirtiéndolos en TreeSet o en cualquier Lista como ArrayList o LinkedList, etc.
// Create a TreeSet object of class E
TreeSet<E> ts = new TreeSet<E> ();
// Convert your HashSet into TreeSet
ts.addAll(yourHashSet);
System.out.println(ts.toString() + "/t Sorted Automatically");
Puede usar TreeSet como se menciona en otras respuestas.
Aquí hay un poco más de elaboración sobre cómo usarlo:
TreeSet<String> ts = new TreeSet<String>();
ts.add("b1");
ts.add("b3");
ts.add("b2");
ts.add("a1");
ts.add("a2");
System.out.println(ts);
for (String s: ts)
System.out.println(s);
Salida:
[a1, a2, a3, a4, a5]
a1
a2
b1
b2
b3
Puede usar la biblioteca de guayaba para el mismo
Set<String> sortedSet = FluentIterable.from(myHashSet).toSortedSet(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// descending order of relevance
//required code
}
});
Un HashSet no garantiza ningún orden de sus elementos. Si necesita esta garantía, considere usar un TreeSet para contener sus elementos.
Sin embargo, si solo necesita que los elementos estén ordenados para esta ocurrencia, solo cree temporalmente una lista y oriéntela:
Set yourHashSet = new HashSet();
...
List sortedList = new ArrayList(yourHashSet);
Collections.sort(sortedList);
Use java.util.TreeSet
como el objeto real. Cuando itera sobre esta colección, los valores vuelven en un orden bien definido.
Si usa java.util.HashSet
, el orden depende de que una función interna tenga más que probable que no sea lexicográfica.
puedes hacer esto de las siguientes maneras:
Método 1:
- Crea una lista y almacena todos los valores de hashset en ella
- ordenar la lista usando Collections.sort ()
- Almacene la lista nuevamente en LinkedHashSet ya que conserva el orden de inserción
Método 2:
- Cree un conjunto de árboles y almacene todos los valores en él.
El método 2 es más preferible porque el otro método consume mucho tiempo para transferir datos entre hashset y list.
1. Add all set element in list -> al.addAll(s);
2. Sort all the elements in list using -> Collections.sort(al);
public class SortSetProblem {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList();
Set<String> s = new HashSet<>();
s.add("ved");
s.add("prakash");
s.add("sharma");
s.add("apple");
s.add("ved");
s.add("banana");
System.out.println("Before Sorting");
for (String s1 : s) {
System.out.print(" " + s1);
}
System.out.println("After Sorting");
al.addAll(s);
Collections.sort(al);
for (String set : al) {
System.out.print(" " + set);
}
}
}
entrada - ved prakash sharma apple ved banana
Salida - plátano de manzana prakash sharma ved