Removing duplicate values from an array Here is my code for removing duplicated values from an array. I think I tested it with the most possible cases. Any suggestions or bugs? 

class duplicate {

    public static int[] removeDuplicates(int[] arr) { 
        int end = arr.length;

        for (int i = 0; i &lt; end; i++) {
            for (int j = i + 1; j &lt; end; j++) {
                if (arr[i] == arr[j]) {                  
                    int shiftLeft = j;

                    for(int k = j + 1; k &lt; end; k++, shiftLeft++) {
                        arr[shiftLeft] = arr[k];
                    }

                    end--;
                    j--;
                }
            }
        }

        int[] whitelist = new int[end];

        for (int i = 0; i &lt; end; i++) {
            whitelist[i] = arr[i];
        }

        return whitelist;
    }
}


After some tests, it appears really inefficient because an array with 1,000,000 elements takes a very long time to end. Is there any better way to implement this on arrays?
Suggestion: 

public static Integer[] removeDuplicates(Integer[] arr) {
  return new HashSet&lt;Integer&gt;(Arrays.asList(arr)).toArray(new Integer[0]);
}


Another solution might be:

public static int[] removeDuplicates(int[] arr) {
  Set&lt;Integer&gt; alreadyPresent = new HashSet&lt;Integer&gt;();
  int[] whitelist = new int[0];

  for (int nextElem : arr) {
    if (!alreadyPresent.contains(nextElem)) {
      whitelist = Arrays.copyOf(whitelist, whitelist.length + 1);
      whitelist[whitelist.length - 1] = nextElem;
      alreadyPresent.add(nextElem);
    }
  }

  return whitelist;
}


Here you only iterate once via arr.