Java/컬렉션

[Java]Stack 특정 값 존재하는지 확인하는 방법

DevStory 2022. 8. 23.

Stack 특정 값 존재하는지 확인하는 방법

Stack은 제일 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last-In First-Out) 구조의 자료구조입니다.

 

Java의 컬렉션은 Stack 클래스를 제공하며, push() 메서드와 pop() 메서드를 사용하여 데이터를 추가하거나 제거할 수 있습니다.

 

Stack에 특정 값이 존재하는지 확인하는 방법을 알아보기 위해 해당 포스팅을 찾아오신 분들은 Stack 자료구조에 대한 이해도가 있다고 생각되어 Stack에 대해 자세하게 설명하지 않겠습니다.

 

이번 포스팅은 Stack에서 특정 값이 존재하는지 확인할 수 있는 몇 가지 방법을 소개합니다.


방법 1. Vector 클래스의 contains 메서드

첫 번째 방법으로 Vector 클래스의 contains() 메서드를 사용하여 Stack에 특정 값이 존재하는지 확인할 수 있습니다.

 

Java의 Stack은 Vector에서 파생된 클래스입니다. 따라서, Vector에서 제공하는 특정 메서드를 사용할 수 있습니다.

 

다음은 Stack 클래스에서 사용할 수 있는 Vector 클래스의 메서드 목록입니다.

[Java 1.7]

 

[Java 1.8]

 

contains() 메서드는 특정 값이 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

 

다음 예제는 contains() 메서드를 호출하여 특정 값이 존재하는지 확인합니다.

public static void main(String args[]) {
  Stack<Integer> stack = new Stack<>();

  stack.push(10);
  stack.push(20);
  stack.push(30);
  stack.push(40);

  System.out.println("20은 존재하는가? " + stack.contains(20));
  System.out.println("50은 존재하는가? " + stack.contains(50));
  System.out.println("100은 존재하는가? " + stack.contains(100));
}

[실행 결과]

20은 존재하는가? true
50은 존재하는가? false
100은 존재하는가? false

방법 2. Vector 클래스의 containsAll 메서드

Stack은 Vector 클래스의 containsAll() 메서드를 사용할 수 있습니다.

 

containsAll() 메서드에 특정 값을 컬렉션으로 전달합니다.

 

모든 요소가 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

 

다음 예제는 containsAll() 메서드를 호출하여 특정 값이 존재하는지 확인합니다.

public static void main(String args[]) {
  Stack<Integer> stack = new Stack<>();

  stack.push(10);
  stack.push(20);
  stack.push(30);
  stack.push(40);

  System.out.println("[10, 20, 30]은 존재하는가? " +
          stack.containsAll(Arrays.asList(10, 20, 30)));

  System.out.println("[10, 20, 100]은 존재하는가? " +
          stack.containsAll(Arrays.asList(10, 20, 100)));

  System.out.println("[100, 200, 300]은 존재하는가? " +
          stack.containsAll(Arrays.asList(100, 200, 300)));
}

[실행 결과]

[10, 20, 30]은 존재하는가? true
[10, 20, 100]은 존재하는가? false
[100, 200, 300]은 존재하는가? false

방법 3. Stack 클래스의 search 메서드

마지막 방법으로 Stack 클래스에 정의된 search() 메서드를 사용하여 특정 값이 존재하는지 확인할 수 있습니다.

 

search() 메서드는 Stack에 값이 존재하면 순번을 반환하며, 존재하지 않으면 -1을 반환합니다.

 

여기서 주의할 점으로 순번과 인덱스는 다른 개념입니다.

 

search() 메서드는 인덱스를 반환하지 않습니다. lastIndexOf() 메서드를 사용하여 스택의 마지막 위치인 꼭대기(Top)에서 데이터를 검색하며, 특정 값이 꼭대기(Top)에 존재하면 1을 반환하고 한 층씩 내려갈수록 반환 결과는 +1 증가합니다.

 

스택에 동일한 값이 존재하는 경우 마지막 위치와 가장 가까운 값의 순번을 반환합니다.

 

다음 예제는 search() 메서드를 사용하여 특정 값 존재 여부를 확인합니다.

public static void main(String args[]) {
  Stack<Integer> stack = new Stack<>();

  stack.push(10);
  stack.push(20);
  stack.push(30);
  stack.push(10);
  stack.push(200);
  stack.push(300);

  System.out.println("10의 위치는? " + stack.search(10));
  System.out.println("20의 위치는? " + stack.search(20));
  System.out.println("300의 위치는? " + stack.search(300));
  System.out.println("400의 위치는? " + stack.search(400));
}

[실행 결과]

10의 위치는? 3
20의 위치는? 5
300의 위치는? 1
400의 위치는? -1
반응형

'Java > 컬렉션' 카테고리의 다른 글

[Java]HashMap 초기화 방법  (0) 2022.08.29
[Java]ArrayList 값 변경 방법  (0) 2022.08.29
[Java]HashMap 순회하는 방법  (0) 2022.06.27
[Java]ArrayList 중복 제거  (0) 2022.06.27
[Java]HashSet 정렬  (0) 2022.06.27

댓글