¿Cómo agregar una matriz en Set correctamente?

Estoy tratando de agregar una matriz entera en Set de la siguiente manera,

int[] arr = { 2, 6, 4 , 2, 3, 3, 1, 7 }; 
Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr));

Recibo un error que dice lo siguiente,

myTest.java:192: error: no suitable constructor found for HashSet(List<int[]>)
    Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr));
                       ^
constructor HashSet.HashSet(Collection<? extends Integer>) is not applicable
  (argument mismatch; inferred type does not conform to upper bound(s)
      inferred: int[]
      upper bound(s): Integer,Object)
constructor HashSet.HashSet(int) is not applicable
  (argument mismatch; no instance(s) of type variable(s) T exist so that List<T> conforms to int)
 where T is a type-variable:
T extends Object declared in method <T>asList(T...)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to        get full output
   1 error

En segundo lugar, también intento lo siguiente y sigo recibiendo errores,

int[] arr = { 2, 6, 4 , 2, 3, 3, 1, 7 }; 
Set<Integer> set = new HashSet<Integer>( );
Collections.addAll(set, arr);

¿Cómo agregar una matriz Integer en Set en Java correctamente? Gracias.

Respuesta 1

Debe usar el tipo de envoltura para usar Arrays.asList(T...)

Integer[] arr = { 2, 6, 4, 2, 3, 3, 1, 7 };
Set<Integer> set = new HashSet<>(Arrays.asList(arr));

o agregue los elementos manualmente como

int[] arr = { 2, 6, 4, 2, 3, 3, 1, 7 };
Set<Integer> set = new HashSet<>();
for (int v : arr) {
    set.add(v);
}

Finalmente, si necesita preservar el orden de inserción, puede usar un LinkedHashSet .

Respuesta: 2

myTest.java:192: error: no suitable constructor found for HashSet(List<int[]>)

Tenga en cuenta que las matrices en Java son Objectspor lo Arrays.asList(int[])considerarán internamente int[]como un solo elemento. Por lo tanto, <T> List<T> asList(T... a)creará en List<int[]>lugar de List<Integer>y, por lo tanto, no puede crear Set<Integer>desde una colección de matriz (no Integerelementos).

Las posibles soluciones podrían ser, simplemente use Integer(clase wrapper) en lugar de int(tipo primitivo) (que ya está indicado por Elliott Frisch).

Si está utilizando Java-8y obteniendo int[]y no puede cambiar a Integer[],

int[] arr = { 2, 6, 4, 2, 3, 3, 1, 7 };
Integer[] wrapper = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Set<Integer> set = new HashSet<Integer>(Arrays.asList(wrapper));

Además, como se señaló anteriormente Louis Wasserman, si está utilizando java-8puede recopilar directamente elementos de la matriz Set.

Set<Integer> set = Arrays.stream(arr).boxed().collect(Collectors.toSet());
Respuesta: 3

Intenta insertar en Set intvalores, pero sus Settiendas Integer.

Cambio

int[] arr = { 2, 6, 4, 2, 3, 3, 1, 7 };

a

Integer[] arr = { 2, 6, 4, 2, 3, 3, 1, 7 };

Además, a medida que va a crear un conjunto de matriz de enteros, recuerde que los enteros tienen un grupo de caché especial para enteros entre rango -127 to +128 . Todos los objetos enteros con valor dentro de este rango se refieren a los mismos objetos en el grupo. Por lo tanto, no se asignará memoria nueva para los enteros en el conjunto.

Respuesta: 4

Acabo de comenzar a usar el selenio webdriver para crear pruebas para sitios web que completan formularios haciendo clic en botones, etc. ¿Para qué más se puede usar Selenium? ¿Es este el propósito principal para ...

Estaba jugando con JavaScript y me quedé atascado con un programa simple. Declaré una matriz en JavaScript como var a = [0, 1, 2]; Entonces, como no hay un tamaño fijo para una matriz en JavaScript ...

Realmente no pude encontrar las palabras sobre cómo describir mi pregunta en el título. Lo que intento lograr es algo como esto: (Pseudocódigo) SuperClass [] superArray = new SuperClass []; ...

He estado trabajando diariamente con el Modelo de Memoria Java durante algunos años. Creo que entiendo bien el concepto de carreras de datos y las diferentes formas de evitarlas (por ejemplo, ...