I have following two scenarios:
1. int value as parameter
int intNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(intNum);
System.out.println(list.size());
// output: 2
2. long value as parameter
long longNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(longNum);
System.out.println(list.size());
// output: 3
I am passing 2 as the value in both cases, but I am getting a different size value of the List. What is the actual reason for this behavior?
Properly removing an Integer from a List does not explain about build-in data type having same value but having behavior differently as asked above
ArrayList allows duplicate values in its collection. On other hand duplicate elements are not allowed in Hashset.
remove(int index) method removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
List allows duplicates while Set doesn't allow duplicate elements . All the elements of a Set should be unique if you try to insert the duplicate element in Set it would replace the existing value. List permits any number of null values in its collection while Set permits only one null value in its collection.
Autoboxing
The list.remove
method is overloaded, and the two different signatures are used for different purposes. One, list.remove(int)
, removes an item based on its index, and the other one, list.remove(Object)
, removes an item based on object equality.
Your first situation triggers the first type, and your second example (with a long longNum
), triggers the second type, autoboxing the long
primitive to a java.lang.Long
object. This is not equal to the java.lang.Integer
(autoboxed) values added to the list, and thus will not remove anything from the list and the size will remain same.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With