자바 JAVA 코딩테스트 util 콜렉션 구현체 : list, map, set, stack, queue 정리

2024. 4. 12. 03:07코딩/코딩 테스트

 

JAVA 코딩테스트 util 콜렉션 구현체 : list, map, set, stack, queue 정리

 

 

 

 

자바 List

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

public class Main {
    public static void main(String[] args) {
        // Integer 객체들을 저장하는 ArrayList를 선언
        List<Integer> numbers = new ArrayList<>();
        
    }
}

 

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        
        // 요소 추가
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");
        
        // 특정 위치에 요소 추가
        names.add(1, "Dave");
        
        // 요소 접근
        String firstPerson = names.get(0); // 첫 번째 요소 접근
        System.out.println("First person: " + firstPerson);
        
        // 요소 제거
        names.remove("Bob"); // 객체 "Bob" 제거
        names.remove(0); // 첫 번째 요소 제거
        
        // List의 모든 요소 출력
        for (String name : names) {
            System.out.println(name);
        }
    }
}

 

List의 유용한 메소드들

  • .add(E e): 리스트의 끝에 요소를 추가합니다.
  • .add(int index, E element): 리스트의 특정 위치에 요소를 추가합니다.
  • .get(int index): 지정된 위치의 요소를 반환합니다.
  • .remove(Object o): 지정된 객체를 제거합니다. 성공적으로 제거되면 true를 반환합니다.
  • .remove(int index): 지정된 위치의 요소를 제거하고 그 요소를 반환합니다.
  • .size(): 리스트에 있는 요소의 수를 반환합니다.
  • .clear(): 리스트의 모든 요소를 제거합니다.

 

 

 

 

 

 

 


자바 Set 

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        // HashSet 선언
        Set<String> set = new HashSet<>();
    }
}

 

public class Main {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        
        // 요소 추가
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");
        
        // 요소 검사
        if (set.contains("Apple")) {
            System.out.println("Apple is in the set.");
        }
        
        // 요소 제거
        set.remove("Banana");
        
        // Set의 모든 요소 출력
        for (String element : set) {
            System.out.println(element);
        }
    }
}

 

Set의 특징과 주요 메소드들

  • .add(E e): 요소를 세트에 추가합니다. 요소가 이미 존재하면, 추가 작업은 무시됩니다.
  • .contains(Object o): 세트가 지정된 요소를 포함하는지 여부를 반환합니다.
  • .remove(Object o): 지정된 요소를 세트에서 제거합니다. 요소가 세트에 있으면 제거하고 true를 반환합니다.
  • .size(): 세트에 있는 요소의 수를 반환합니다.
  • .isEmpty(): 세트가 비어 있는지 확인합니다.

Set은 중복 없는 요소를 관리해야 할 때 유용하며, HashSet은 요소들을 빠르게 처리할 수 있으나 순서를 유지하지 않습니다. 순서를 유지해야 하는 경우 LinkedHashSet을, 정렬된 순서로 요소를 관리해야 하는 경우 TreeSet을 사용할 수 있습니다.

 

 

 

 

 

 

 

 

 

 


자바 Map

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        // HashMap 선언
        Map<String, Integer> map = new HashMap<>();
    }
}

 

 

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        // 요소 추가
        map.put("apple", 50);
        map.put("banana", 70);
        map.put("cherry", 85);
        
        // 키를 사용해 값에 접근
        if (map.containsKey("banana")) {
            Integer value = map.get("banana");
            System.out.println("Value of banana: " + value);
        }
        
        // 요소 제거
        map.remove("apple");
        
        // Map의 모든 요소 출력
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

 

Map의 주요 메소드들

  • .put(K key, V value): 맵에 키와 값을 추가합니다. 만약 키가 이미 존재한다면, 해당 키의 값을 새로운 값으로 대체합니다.
  • .get(Object key): 지정된 키에 대응하는 값을 반환합니다. 키가 맵에 없다면 null을 반환합니다.
  • .remove(Object key): 지정된 키와 그에 대응하는 값을 맵에서 제거합니다.
  • .containsKey(Object key): 맵에 지정된 키가 있는지 검사합니다.
  • .containsValue(Object value): 맵에 지정된 값이 있는지 검사합니다.
  • .keySet(): 맵의 모든 키를 Set 형태로 반환합니다.
  • .values(): 맵의 모든 값을 컬렉션 형태로 반환합니다.
  • .entrySet(): 맵의 모든 키-값 쌍을 Set<Entry<K,V>> 형태로 반환합니다.

HashMap은 해시 테이블을 사용하여 키-값 쌍을 저장하기 때문에 요소의 순서를 보장하지 않습니다. 순서가 중요한 경우 LinkedHashMap을 사용할 수 있으며, 정렬된 순서로 키-값 쌍을 유지하고 싶다면 TreeMap을 사용할 수 있습니다.

 

 

 

 

 

 

 


자바 Stack

import java.util.Stack;

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

 

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        
        // 요소 추가
        stack.push(1);
        stack.push(2);
        stack.push(3);
        
        // 최상단 요소 접근(제거하지 않음)
        System.out.println("Top element: " + stack.peek()); // 출력: 3
        
        // 요소 제거 및 반환
        while (!stack.isEmpty()) {
            System.out.println(stack.pop()); // 출력: 3, 2, 1
        }
    }
}

 

 

주요 Stack 메소드

  • .push(E item): 스택의 최상단에 요소를 추가합니다.
  • .pop(): 스택의 최상단에서 요소를 제거하고 그 요소를 반환합니다. 스택이 비어 있으면 EmptyStackException을 던집니다.
  • .peek(): 스택의 최상단에 있는 요소를 제거하지 않고 반환합니다. 스택이 비어 있으면 EmptyStackException을 던집니다.
  • .isEmpty(): 스택이 비어 있는지 여부를 반환합니다.
  • .search(Object o): 스택에서 지정된 객체를 찾고, 최상단에서부터 객체까지의 거리를 1부터 시작하는 위치로 반환합니다. 객체가 스택에 없으면 -1을 반환합니다.

Stack 클래스는 벡터(Vector)를 상속받기 때문에, 스레드 안전(thread-safe)하지만 대부분의 멀티스레드 환경에서는 Stack 대신 ArrayDeque와 같은 다른 자료 구조를 사용하는 것이 좋습니다. ArrayDeque는 자바의 Deque 인터페이스를 구현하며, 스택 및 큐(queue) 자료 구조의 기능을 모두 제공합니다. Stack보다 더 나은 성능을 제공합니다.

 

 

 

 

 

 

 

 

 

 


자바 Queue

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
    }
}

 

 

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        
        // 요소 추가
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        
        // 최상단 요소 접근(제거하지 않음)
        System.out.println("Head element: " + queue.peek()); // 출력: 1
        
        // 요소 제거 및 반환
        while (!queue.isEmpty()) {
            System.out.println(queue.poll()); // 출력: 1, 2, 3
        }
    }
}

 

 

주요 Queue 메소드

  • .offer(E e): 큐의 끝에 요소를 추가합니다. 성공하면 true를 반환하고, 큐가 추가를 수용할 수 없으면 false를 반환합니다.
  • .poll(): 큐의 첫 번째 요소를 제거하고 반환합니다. 큐가 비어 있으면 null을 반환합니다.
  • .peek(): 큐의 첫 번째 요소를 제거하지 않고 반환합니다. 큐가 비어 있으면 null을 반환합니다.
  • .isEmpty(): 큐가 비어 있는지 여부를 반환합니다.

 

Queue 인터페이스는 다양한 구현체를 가지고 있으며, 사용 상황에 따라 적합한 구현체를 선택할 수 있습니다. 예를 들어, 스레드 안전이 필요한 경우 ConcurrentLinkedQueue를 사용할 수 있고, 요소의 우선순위에 따라 요소를 정렬해야 하는 경우 PriorityQueue를 사용할 수 있습니다.

 

 

 

 

 

 

 

자바 JAVA 코딩테스트 util 콜렉션 구현체 : list, map, set, stack, queue 정리