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 정리
'코딩 > 코딩 테스트' 카테고리의 다른 글
JAVA 자바 디자인 패턴 : 팩토리 패턴, 장점 단점, 예시 (0) | 2024.04.16 |
---|---|
JAVA 자바 디자인 패턴 : 싱글톤 패턴, 장단점, 의존성 주입, 예시 (0) | 2024.04.16 |
자바 JAVA 코딩테스트 util heap 선언 및 사용법 (0) | 2024.04.12 |
백준 25083번 새싹 문제 파이썬 풀이 (0) | 2023.03.20 |
파이썬 백슬래시( \ ), 따옴표(", ') 출력: 백준 10171번 고양이 문제 정답 (0) | 2022.02.06 |