
List의 remove메서드는 index와 Object를 받는 두 가지 방법이 존재합니다.
List<String> Arr = new ArrayList();
Arr.add("11");
Arr.add("12");
Arr.add("13");
System.out.println(Arr.toString()); // [11,12,13]
Arr.remove(1); //12가 삭제됩니다
System.out.println(Arr.toString()); // [11,13]
Arr.remove("13"); //13이 삭제됩니다
System.out.println(Arr.toString()); // [11]
List<Integer> Arr2 = new LinkedList();
Arr2.add(1);
Arr2.add(2);
Arr2.add(3);
System.out.println(Arr2.toString()); // [1,2,3]
Arr2.remove(1);
System.out.println(Arr2.toString()); // [1,3]
Arr2.remove(3); // java.lang.IndexOutOfBoundsException
위 실험을 통해 숫자를 담고 있는 List의 remove는 index를 기준으로만 동작한다는걸 알게 되었습니다.
그런데 코딩을 하다보면 Integer로 값을 받고 숫자를 기준으로 값을 제거하고 싶은 경우가 발생합니다.
값을 기준으로 remove를 진행하려면 Integer()를 사용해 주면 됩니다.
List<Integer> Arr2 = new LinkedList();
Arr2.add(1);
Arr2.add(2);
Arr2.add(3);
System.out.println(Arr2.toString()); // [1,2,3]
Arr2.remove(1);
System.out.println(Arr2.toString()); // [1,3]
Arr2.remove(new Integer(3)); // 에러 발생 안함
System.out.println(Arr2.toString()); // [1]
그 답은 여기에 있습니다.

값을 기준으로 remove를 실행할 때에는 인자로 Object를 받기 때문입니다.
조금 더 쉽게 얘기하면 int1 과 Integer(1)은 다르기 때문에 이런 결과가 나오는 것입니다.
객체입니다.List가 숫자를 담고 있을 때