Java

[JAVA]자바 리스트(list)의 remove() 아이템(객체, 요소) 삭제하는 방법 2가지 : remove(),Iterator를 사용하자!!

Java의 ArrayList에서 객체를 제거하는 방법은 두 가지가 있습니다 . 첫 번째는 remove( ) 메서드를 사용하는 것이고 두 번째는 Iterator를 사용하는 것 입니다. ArrayList는 오버로드 된 remove() 메서드를 제공합니다.

구분
제거 할 객체의 허용 인덱스 ( 예 : remove (int index)) 
제거 할 허용 객체 ( 예 : remove (Object obj))

객체가 리스트의 어느 인덱스에 있는지 알고 있다면 첫 번째 방법을 사용하고 그렇지 않으면 두 번째 방법을 사용합니다. 다음 예제코드를 살펴보면 이해가 빠를 것으로 생각됩니다. 그럼 첫번째 예제를 살펴봅니다.

[샘플 예제 코드]

package edu.sample;

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

public class Tutorial {

	public static void main(String[] args) {
	    List<Integer> numbers = new ArrayList<Integer>(); 
	    numbers.add(1); 
	    numbers.add(2); 
	    numbers.add(3); 
	    numbers.add(45); 
	    System.out.println("ArrayList 출력 : " + numbers); 
	    
	    //삭제(인덱스) 
	    numbers.remove(1); 
	    
	    //삭제 (객체(object))
	    numbers.remove(3);
	    
	    System.out.println("삭제 후 ArrayList 출력 : " + numbers); 

	}

}

 

[예제 코드 실행결과]

실행결과 첫번째 remove()와 두번째 remove() 역시 index값을 사용한 방법으로 처리되어, IndexOutOfBoundsException 오류가 발생하게 됩니다. 3이라는 객체(요소)(아이템)를 삭제하려면 어떻게 해야할까요?


ArrayList contains : [1, 2, 3, 45]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.remove(Unknown Source)
	at edu.sample.Tutorial.main(Tutorial.java:20)

이러한 모호함을 제거하기 위해 객체(object)를 제거할 경우에는 객체 타입으로 선언해서 삭제해야합니다.

numbers.remove(new Integer(3));

 

 

package edu.sample;

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

public class Tutorial {

	public static void main(String[] args) {
	    List<Integer> numbers = new ArrayList<Integer>(); 
	    numbers.add(1); 
	    numbers.add(2); 
	    numbers.add(3); 
	    numbers.add(45); 
	    System.out.println("ArrayList 출력 : " + numbers); 
	    
	    //삭제(인덱스) 
	    numbers.remove(1); 
	    
	    //삭제 (객체(object))
	    numbers.remove(new Integer(3));
	    
	    System.out.println("삭제 후 ArrayList 출력 : " + numbers); 

	}

}

[에제 코드 실행결과]

ArrayList 출력 : [1, 2, 3, 45]
삭제 후 ArrayList 출력 : [1, 45]

정확하게 숫자 3이 삭제되었음을 알 수 있습니다. 

 

두번째 방법 :Iterator() 사용

다음은 두번째 방법으로 Iterator()를 사용하여 객체를 삭제하는 방법에 대해 알아봅니다. Iterator()를 사용하는 경우는 반복적으로 객체나 요소(엘리먼트)를 삭제할 경우에 사용합니다. 그럼 예제를 살펴봅니다. 

package edu.sample;

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

public class Tutorial {

	public static void main(String[] args) {
	    List<Integer> numbers = new ArrayList<Integer>(); 
	    numbers.add(1); 
	    numbers.add(2); 
	    numbers.add(3); 
	    numbers.add(45); 
	    System.out.println("ArrayList 출력 : " + numbers); 
	    
	    Iterator<Integer> itr = numbers.iterator();
	    
	    while (itr.hasNext()) { 
	    	Integer number = itr.next(); 
	    	
	    	//짝수인경우 삭제를 해보자
	    	if (number % 2 == 0) { 
	    		numbers.remove(number); 
	    		} 
	    	}
	    
	    System.out.println("삭제 후 ArrayList 출력 : " + numbers); 

	}

}

[샘플코드 실행결과]

ConcurrentModificationException 오류가 발생합니다. 왜 오류가 발생했는지 찾으셨나요?

ArrayList 출력 : [1, 2, 3, 45]
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
	at java.util.ArrayList$Itr.next(Unknown Source)
	at edu.sample.Tutorial.main(Tutorial.java:20)

iterator()를 사용하여 객체나 요소를 삭제하는 경우, 리스트의 remove()메서드를 사용할 수 없습니다.

numbers.remove(number); <---오류 코드의 원인

 

반드시 iterator 변수로 접근하여 삭제해야합니다. 

예제 itr.remove()

package edu.sample;

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

public class Tutorial {

	public static void main(String[] args) {
	    List<Integer> numbers = new ArrayList<Integer>(); 
	    numbers.add(1); 
	    numbers.add(2); 
	    numbers.add(3); 
	    numbers.add(45); 
	    System.out.println("ArrayList 출력 : " + numbers); 
	    
	    Iterator<Integer> itr = numbers.iterator();
	    
	    while (itr.hasNext()) { 
	    	Integer number = itr.next(); 
	    	
	    	//짝수인경우 삭제를 해보자
	    	if (number % 2 == 0) { 
	    		//numbers.remove(number); 
	    		itr.remove();
	    		} 
	    	}
	    
	    System.out.println("삭제 후 ArrayList 출력 : " + numbers); 

	}

}

[실행결과]

ArrayList 출력 : [1, 2, 3, 45]
삭제 후 ArrayList 출력 : [1, 3, 45]

오늘은 자바의 ArrayList에서 객체를 제거하는 방법에 대해 알아보았습니다. 열공하세요!! 안뇽~~

 

Leave a Reply

error: Content is protected !!