🫠 코테에서 자주 쓰는 기본함수 2편 (자료구조)
1. Stack
- LIFO (Last In First Out) 구조
Stack<Integer> stack = new Stack<>();
Stack<String> stack = new Stack<>();
stack.push(1); // (값 추가)
stack.pop(); // (맨 위의 값 삭제, 없으면 EmptyStackException)
stack.clear(); // (값 전체삭제)
stack.peek(); // (맨 위의 값 출력)
stack.size(); // (크기)
stack.empty() // (비어있으면 true, 아니면 false)
stack.contains(1) // (1이 있으면 true, 아니면 false)
2. Queue
- FIFO (First In First Out) 구조
Queue<Integer> queue = new LinkedList<>();
Queue<String> queue = new LinkedList<>();
queue.add(1) // (값 추가, 성공시 true 반환, 공간이 없어 실패 시 IllegalStateException)
queue.offer(2) // (값 추가, 성공시 true 반환, 공간이 없어 실패 시 IllegalStateException)
queue.poll() // (첫 번째 값 반환, 비어있으면 null)
queue.remove() // (첫 번째 값 삭제)
queue.clear() // (모든 값 삭제)
queue.peek() // (첫 번째 값 출력)
3. PriorityQueue
- 우선순위를 먼저 결정하고, 그 우선순위가 높은 엘리먼트가 먼저 나가는 자료구조
// (우선순위가 낮은 숫자 순)
PriorityQueue<Integer> pq = new PriorityQueue<>();
// (우선순위가 높은 숫자 순)
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
pq.add(1) // (값 추가, 성공시 true 반환, 공간이 없어 실패 시 IllegalStateException)
pq.offer(2) // (값 추가, 성공시 true 반환, 공간이 없어 실패 시 IllegalStateException)
pq.poll() // (첫 번째 값 반환, 비어있으면 null)
pq.remove() // (첫 번째 값 삭제)
pq.clear() // (모든 값 삭제)
pq.peek() // (첫 번째 값 출력)
4. HashSet
- HashSet : 중복 허용 X, 순서 유지 X
- LinkedHashSet : 중복 허용 X, 순서 유지 O
- TreeSet : 중복 허용 X, 오름차순 정렬 O
- 성능 : HashSet > LinkedHashSet > TreeSet
// 기본 생성 시 initial capacity(16), load factor(0.75)의 값을 가진 HashSet객체가 생성됨
// 초기에 저장할 데이터 갯수를 알고 있다면 Set의 초기용량을 지정해주는 것이 좋다
Set<Integer> set = new HashSet<>(); // (new LinkedHashSet<>(); new TreeSet<>();)
set.add(1) // (값 추가)
set.remove(1) // (값이 1인 데이터 삭제)
set.removeAll(set2) // (set에서 set2에 들어있는 데이터를 모두 삭제)
set.retainAll(set2) // (set에서 set2에 들어있지 않은 데이터를 모두 삭제)
set.clear() // (모든 값 삭제)
set.size() // (크기)
set.contains(1) // (1이 있으면 true, 없으면 false)
// (한개씩 출력)
Iterator iter = set.iterator();
while (iter.hasNext())
System.out.println(iter.next()); // [방법1]
for (String item: set)
System.out.println(item); // [방법2]
// (정렬)
int arr[] = set.toArray(new String[set.size()]); // [방법1] (set을 Array로)
Arrays.sort(arr); // (오름차순 정렬)
ArrayList<Integer> list = new ArrayList<>(set); // [방법2] (set을 ArrayList로)
Collections.sort(list, (o1,o2) -> o1 - o2); // (오름차순 정렬)
Collections.sort(list, (o1,o2) -> o2 - o1); // (내림차순 정렬)
TreeSet<String> treeSet = new TreeSet<>(); // [방법3] (HashSet을 TreeSet으로)
treeSet.addAll(set); // (내부적으로 이진트리, 오름차순 정렬)
5. HashMap
- key 중복저장 불가능, value 중복 저장 가능
- HashMap
- LinkedHashMap : 키값 입력순으로 정렬
- TreeMap : 키값 알파벳순(오름차순)으로 정렬
Map<Integer, String> map = new HashMap<>();
Map<String, String> map = new HashMap<>();
map.put(1, "B"); // (값 추가)
map.put(1, "A"); // (key 1의 value가 "A"로 대체)
map.put(2, "a"); // (값 추가)
map.remove(1); // (key 값으로 요소 삭제)
map.clear(); // (모든 값 삭제)
map.containsKey(1); // (key값 중 1이 있으면 true, 없으면 false)
map.containsValue("A"); // (value 중 "A"가 있으면 true, 없으면 false)
map.get(1); // (key값이 1인 value)
// (한 개씩 출력)
for (Integer i: map.keySet())
System.out.println("[Key]:" + i + " [Value]:" + map.get(i)); // [방법1]
for (Entry<Integer, String> entry: map.entrySet())
System.out.println(entry.getKey() + entry.getValue()); // [방법2]'개발 > Java' 카테고리의 다른 글
| [Java] 기본 함수 - 1 (0) | 2024.02.17 |
|---|