본문 바로가기

java

[210409] java Deque - removeFirstOccurrence & removeLastOccurrence 메소드

 

removeFirstOccurrence, removeLastOccurrence 메소드는 java.util.Deque 클래스와, Deque 클래스를 상속받는 LinkedList, ArrayDeque 같은 클래스에서 사용할 수 있다. 

 

removeFirstOccurrence


boolean removeFirstOccurrence(Object o)

deque에서 특정 원소에 대해 검색해서, 처음으로 나타난 요소를 제거한다. 만약 deque에 해당 요소가 없다면 아무런 행동도 하지 않는다. 

Object o : deque에서 제거할 요소 

Returns : 해당 요소가 제거되었다면 true를 return한다. 

Throws:

ClassCastException : 매개변수의 클래스 타입이 deque의 타입과 맞지 않을 때 발생한다. 

NullPointException : 매개변수의 값이 null이고, deque가 null 요소를 허용하지 않을 때 발생한다. 

 

 

removeLastOccurrence


boolean removeLastOccurrence(Object o)

deque에서 특정 원소에 대해 검색해서, 끝에서부터 처음으로 나타난 요소를 제거한다. 만약 deque에 해당 요소가 없다면 아무런 행동도 하지 않는다. 

Object o : deque에서 제거할 요소

Returns : 해당 요소가 제거되었다면 true를 return한다. 

Throws:

ClassCastException : 매개변수의 클래스 타입이 deque의 타입과 맞지 않을 때 발생한다. 

NullPointException : 매개변수의 값이 null이고, deque가 null 요소를 허용하지 않을 때 발생한다. 

 

 

LinkedList.java에 선언된 메소드의 내부는 아래 이미지와 같다. 

removeFirstOccurrence의 경우 호출 시 remove(o)를 return한다. 즉, LinkedList의 경우에는 그냥 remove를 호출하는 것과 removeFirstOccurrence를 호출할 때의 결과가 같다. 

removeLastOccurrence의 경우 호출 시 리스트를 끝에서부터 시작부분까지 순회해서, 해당 아이템을 발견하면 제거한다. 

 

ArrayDeque.java의 내부에 선언된 메소드의 내부는 아래 이미지와 같다. 

removeFirstOccurrence의 경우 deque의 head부터 tail까지 순회하며 매개변수로 들어온 요소와 일치하는 요소를 찾는 것을 확인할 수 있다. removeLastOccurence의 경우에는 반대로 tail에서 head까지 순회한다. 일치하는 요소가 존재한다면 delete 메소드를 호출해서 해당 요소를 제거한다. 

 

 

실행 예제 


import java.util.*;

public class Main {

    public static void main(String[] args) {

        Deque<Integer> queue = new LinkedList<>();

        queue.add(5);
        queue.add(1);
        queue.add(4);
        queue.add(3);
        queue.add(6);
        queue.add(4);
        queue.add(5);
        queue.add(4);

        System.out.print("초기 상태: ");
        printDequeElement(queue);

        queue.removeFirstOccurrence(4);
        System.out.print("queue.removeFirstOccurrence(4) 실행 결과 : ");
        printDequeElement(queue);

        queue.removeFirstOccurrence(2);
        System.out.print("queue.removeFirstOccurrence(2) 실행 결과 : ");
        printDequeElement(queue);

        queue.removeLastOccurrence(5);
        System.out.print("queue.removeLastOccurrence(5) 실행 결과 : ");
        printDequeElement(queue);

    }

    public static void printDequeElement(Deque<Integer> queue){
        Iterator<Integer> it = queue.iterator();

        while(it.hasNext()){
            System.out.print(it.next() + " ");
        }

        System.out.println("");
    }
}

 

- 실행 결과

 

 

 

참고 자료 

docs.oracle.com/javase/7/docs/api/java/util/Deque.html#removeFirst() 

 

Deque (Java Platform SE 7 )

A linear collection that supports element insertion and removal at both ends. The name deque is short for "double ended queue" and is usually pronounced "deck". Most Deque implementations place no fixed limits on the number of elements they may contain, bu

docs.oracle.com