Search code examples
javaset

How to add an Array into Set properly?


I'm trying to add in Integer array into Set as following,

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

I'm getting some error telling as following,

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

Secondly, I also tries as following and still getting error,

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

How to add an Integer array into Set in Java properly ? Thanks.


Solution

  • You need to use the wrapper type to use Arrays.asList(T...)

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

    or add the elements manually like

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

    Finally, if you need to preserve insertion order, you can use a LinkedHashSet.