Set, Map, Queue

[Java] Set, Map, Queue에 대해 공부해보기
Jan 05, 2024
Set, Map, Queue

1. Set

💡
ArrayList에서는 데이터 간의 순서가 존재하지만 Set은 집합으로 데이터의 중복을 막도록 설계되었습니다.
  • HashSet : 해쉬 테이블에 원소를 저장하기 때문에 성능면에서 가장 우수합니다.
  • TreeSet : 레드-블랙 트리(red-black tree)에 원소를 저장합니다. 값에 따라 순서가 결정되지만 HashSet보다는 느립니다. (오름 차순으로 정렬됩니다.)
  • LinkedHashSet : 해쉬 테이블과 연결 리스트를 결합한 것으로 원소들의 순서는 삽입되었던 순서와 같습니다.(약간의 비용으로 HashSet의 문제점인 순서의 불명확성을 제거한 방법입니다.)

문자열을 Set에 저장하기

import java.util.HashSet; public class SetTest { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("Milk"); set.add("Bread"); set.add("Butter"); set.add("Cheese"); set.add("Ham"); set.add("Ham"); System.out.println(set); if(set.contains("Ham")){ System.out.println("Ham도 포함되어 있음"); } } }
notion image
LinkedHashSet을 사용한다면
notion image
TreeSet을 사용한다면
notion image
과 같은 결과가 얻어집니다.

2. Map

💡
키-값을 하나의 쌍으로 묶어서 저장하는 자료구조입니다. Map에는 중복된 키를 가질 수 없습니다. 각 키는 오직 하나의 값에만 매핑될 수 있습니다.

Map에 학생들의 데이터 저장하기

import java.util.HashMap; import java.util.Map; public class MapTest { public static void main(String[] args) { Map<String,String> map = new HashMap<>(); map.put("kim","1234"); map.put("park","pass"); map.put("lee","word"); System.out.println(map.get("lee")); // 키를 가지고 값을 참조 for(String key : map.keySet()){ String value = map.get(key); System.out.println("Key: " + key + " value: "+ value); } // map.remove("kim"); // key : "kim" 인 항목 삭제 map.put("choi","password"); System.out.println(map); } }

3. Queue

💡
큐(Queue)는 데이터를 처리하기 전에 잠시 저장하고 있는 자료구조입니다.
  • FIFO(first-in-first-out) : 먼저 들어간 데이터가 먼저 처리됩니다.

큐 FIFO 예제

import java.util.LinkedList; import java.util.Queue; public class QueueTest { public static void main(String[] args) { Queue<Integer> q = new LinkedList<>(); // LinkedList is Queue for (int i = 0; i < 5; i++) { q.add(i); } System.out.println("큐 : "+q); // 1부터 5까지 순차적으로 데이터가 들어감 int e = q.remove(); // FIFO로 인해 맨처음 들어간 데이터가 삭제됨 System.out.println("삭제된 요소 : "+e); System.out.println("큐 : "+q); int r = q.remove(); // FIFO로 인해 그 다음 들어간 데이터가 삭제됨 System.out.println("삭제된 요소 : "+r); System.out.println("큐 : "+q); } }

우선 순위 큐

PriorityQueue : 무작위로 삽입되어도 우선 순위는 가장 작은 원소입니다.
import java.util.PriorityQueue; public class PriorityQueueTest { public static void main(String[] args) { PriorityQueue<Integer> pq = new PriorityQueue<>(); pq.add(30); pq.add(5); pq.add(80); pq.add(20); pq.add(10); System.out.println(pq); // [5, 10, 80, 30, 20] System.out.println("삭제된 원소 : "+pq.remove()); // 5삭제 작은 숫자가 우선순위가 높음 System.out.println(pq); // [10, 20, 80, 30] -> 출력 순서가 우선순위와 동일하지는 않음 } }

 
 
Share article
RSSPowered by inblog