어제 오늘 내일

[Java] ArrayList에서 특정 값 삭제하기 본문

IT/Java

[Java] ArrayList에서 특정 값 삭제하기

hi.anna 2021. 5. 7. 06:23

ArrayList에서 특정값을 삭제하는 방법을 소개합니다.

  1. ArrayList.remove()
  2. ArrayList.removeAll()
  3. Iterator.remove()

 

1. ArrayList.remove()

public E remove​(int index)
public boolean remove​(Object o)

ArrayList의 remove() 메소드를 사용하면,

특정 index 또는 특정 값을 ArrayList에서 삭제할 수 있습니다.

 

remove(int index)

remove() 메소드의 파라미터로 int를 전달하면,

해당 index의 값이 삭제됩니다.

 

remove(Object o)

remove() 메소드의 파라미터로 Object 객체를 전달하면,

ArrayList에서 해당 객체를 찾아서

첫번째로 나오는 값만 삭제합니다.

그리고, 값을 삭제하면 true를 리턴하고,

만약 삭제할 값이 없으면 false를 리턴합니다.

 

 

  예제 코드 1 - remove(int index)  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RemoveElementInArrayList {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<Integer>(Arrays.asList(5, 4, 3, 2, 1));

        // index 1 삭제
        list.remove(1);

        System.out.println(list); // [5, 3, 2, 1]
    }
}

  예제 결과 1 - remove(int index)  

[5, 3, 2, 1]

list.remove(1);

remove() 메소드에 int 값 1을 전달하였기 때문에,

ArrayList의 1 값이 아닌,

index 1 위치의 4가 삭제되었습니다.

 

 

  예제 코드 2 - remove(Object o)  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RemoveElementInArrayList {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<Integer>(Arrays.asList(5, 4, 3, 2, 1, 1));

        // value가 1인 element 삭제
        list.remove(Integer.valueOf(1));

        System.out.println(list); // [5, 4, 3, 2, 1]
    }
}

  예제 결과 2 - remove(Object o)  

[5, 4, 3, 2, 1]

list.remove(Integer.valueOf(1));

index 1의 값을 삭제하는 것이 아니라,

ArrayList에서 1 값을 삭제하기 위해서 Integer 객체를 전달하였습니다.

그런데, remove() 메소드는 ArrayList의 첫번째 1만 삭제합니다.

위 예제처럼, 1이 여러번 나올 경우, 1을 모두 삭제하기 위해서는

다음 예제와 같이 반복문을 사용하거나 removeAll() 메소드를 사용해야 합니다.

 

 

  예제 코드 3 - 특정 값 전체 삭제  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RemoveElementInArrayList {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<Integer>(Arrays.asList(5, 4, 3, 2, 1, 1));

        // value가 1인 element 삭제
        while (list.remove(Integer.valueOf(1))) {
        };

        System.out.println(list); // [5, 4, 3, 2]
    }
}

  예제 코드 3 - 특정 값 전체 삭제  

[5, 4, 3, 2]

while(list.remove(Integer.valueOf(1))) { }

remove(Object o) 메소드는, 

ArrayList에서 값이 삭제되면 true를 리턴하고,

삭제할 값이 없으면 false를 리턴하므로,

반복적으로 특정값을 찾아서 삭제해 주기 위해서 

while문을 사용하였습니다.

 

 

 

2. ArrayList.removeAll()

public boolean removeAll​(Collection<?> c)

removeAll() 메소드는 

파라미터로 넘겨 준 Collection 객체에 담긴 element를 모두 삭제합니다.

 

  코드   

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RemoveElementInArrayList {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<Integer>(Arrays.asList(5, 4, 3, 2, 1, 1));

        // value가 1, 2인 element 모두 삭제
        list.removeAll(Arrays.asList(Integer.valueOf(1), Integer.valueOf(2)));

        System.out.println(list); // [5, 4, 3]
    }
}

  결과   

[5, 4, 3]

list.removeAll(Arrays.asList(Integer.valueOf(1), Integer.valueOf(2)));

removeAll() 메소드의 파라미터로

Integer 1, 2를 담은 List를 전달하였습니다.

list 에서 Integer 1, 2가 모두 삭제된 것을 확인 할 수 있습니다.

 

 

 

3. Iterator.remove()

  코드   

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class RemoveElementInArrayList {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<Integer>(Arrays.asList(5, 4, 3, 2, 1));

        // value가 1인 element 삭제
        Iterator it = list.iterator();
        while (it.hasNext()) {
            int n = (Integer) it.next();

            if (n == 1) {
                it.remove();
            }
        }

        // 결과 출력
        System.out.println(list); // [5, 4, 3, 2]
    }
}

  결과   

[5, 4, 3, 2]

it.remove();

Iterator를 이용하여

ArrayList를 순회하면서

Iterator의 remove() 메소드를 이용해서 특정 값을 삭제하였습니다.

 


 

remove(), removeAll(), Iterator를 이용해서

ArrayList의 특정 값을 삭제하는 방법을 알아보았습니다.

 

 

반응형
Comments