Properly removing an Integer from a List<Integer>
Solution 1:
Java always calls the method that best suits your argument. Auto boxing and implicit upcasting is only performed if there's no method which can be called without casting / auto boxing.
The List interface specifies two remove methods (please note the naming of the arguments):
remove(Object o)
remove(int index)
That means that list.remove(1)
removes the object at position 1 and remove(new Integer(1))
removes the first occurrence of the specified element from this list.
Solution 2:
You can use casting
list.remove((int) n);
and
list.remove((Integer) n);
It doesn't matter if n is an int or Integer, the method will always call the one you expect.
Using (Integer) n
or Integer.valueOf(n)
is more efficient than new Integer(n)
as the first two can use the Integer cache, whereas the later will always create an object.