숫자를 담은 List의 remove

최창효·2022년 2월 5일
0
post-thumbnail

List

  • List가 뭔지 모르겠다면 이 글 을 읽어보시길 바랍니다.

List의 remove


List의 remove메서드는 indexObject를 받는 두 가지 방법이 존재합니다.

  • 아래 예시를 통해 이를 확인해 볼 수 있습니다.
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의 remove는?

  • 그렇다면 숫자를 원소로 하는 List의 remove는 숫자를 index로 인식할까요? 아니면 Object로 인식할까요? 아니면 둘 다 가능할까요?
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)은 다르기 때문에 이런 결과가 나오는 것입니다.

  • 둘의 차이: int는 원시 자료형, Integer는 Wrapper클래스의 객체입니다.

결론

List가 숫자를 담고 있을 때

  • remove는 index를 기준으로 실행된다.
  • 숫자 값을 기준으로 remove를 하고 싶다면 Integer객체로 인자를 넘기면 된다.
profile
기록하고 정리하는 걸 좋아하는 백엔드 개발자입니다.

0개의 댓글