vectores representados ordenados multiplicacion mostrar metodos listas intersección interseccion crear conjuntos como java collections

representados - multiplicacion de conjuntos en java



Agregar elementos a un conjunto en la creación (7)

¿Cómo puedo crear un conjunto en java y luego agregarle objetos cuando está construido? Quiero hacer algo como:

testCollision(getObject(), new HashSet<MazeState>(){add(thing);});

Pero eso no parece del todo correcto.


Desde Java 7 , para crear una instancia de un conjunto inmutable de un solo elemento , puede utilizar:

Collections.singleton(thing);

Devuelve un conjunto inmutable que contiene solo el objeto especificado. El conjunto devuelto es serializable.

- Referencia Javadoc: Colecciones.singleton (T)

En Java 8 , puede crear una instancia de un Conjunto que contenga cualquier número de sus objetos con lo siguiente, que es una adaptación de esta respuesta :

Stream.of(thing, thingToo).collect(Collectors.toSet());


Desde Java 9 también puedes hacerlo así:

Set<String> immutableSet = Set.of("value1", "value2"); Set<Integer> immutableInt = Set.of(1, 2); List<String> immutableList = List.of("item1", "item2"); Map<String, String> immutableMap = Map.of("key1", "value1", "key2", "value2", "key3", "value3");

Observe que todos los Conjuntos / Mapas / Listas creados de esta manera serán inmutables (si mi convención de nombres no lo convenció;)



Otras respuestas son correctas, pero desea agregar una forma más utilizando el bloque de inicialización

new HashSet<MazeState>() { { add(new MazeState()); add(new MazeState()); } };


Puede usar el método util de com.google.common.collect , que es bastante bueno: Sets.newHashSet("your value1", "your valuse2");


Puedes usar llaves dobles:

testCollision(getObject(), new HashSet<MazeState>(){{ add(obj1); add(obj2);}};

o:

Set<String> set = new HashSet<String>(){{ add("hello"); add("goodbye"); }};

Esto se denomina inicialización de doble refuerzo y es una de las características menos conocidas de Java. Lo que hace es hacer que el compilador cree una clase interna anónima que haga la creación y la manipulación por usted (por ejemplo, si su clase fue definitiva, no podría usarla).

Ahora, una vez dicho esto, te animo a que lo uses solo en los casos en que realmente necesites la brevedad. Casi siempre es mejor ser más explícito, de modo que sea más fácil entender su código.


Si no le importa la inmutabilidad, puede utilizar la clase ImmutableSet Google Guava :

ImmutableSet.of(new MazeState(), new MazeState());