본문 바로가기

자료구조9

[Java] SortedMap 사용법 및 예제 자바에서 Map 인터페이스는 Key와 Value 쌍을 저장하기 위해 사용된다. Map 인터페이스를 상속하여 정의된 SortedMap은 Key와 Value 쌍을 순서를 유지하면서 저장한다. SortedMap Map 인터페이스를 상속하는 SortedMap은 Key-Value 쌍을 정렬된 순서대로 저장한다. Map 인터페이스에서 정의하는 것처럼 Key를 통해 Value를 얻어올 수 있으며, 동시에 정렬된 순서대로 Key-Value 쌍을 순회할 수도 있다. Map에 저장되는 데이터를 순서대로 접근하고 싶은 경우 사용하면 좋다. SortedMap에 저장되는 Key-Value는 Key값의 Natural Order에 맞게 저장된다. Key 클래스가 Comparable 인터페이스를 구현하도록하거나 SortedMap의 .. 2023. 5. 24.
[Java] DelayQueue 사용법 및 예제 자바의 DelayQueue는 java.util.concurrent 패키지에 들어있는 클래스로 AbstractQueue를 상속받고 있으며 BlockingQueue 인터페이스를 구현한다. DelayQueue는 엘리먼트의 딜레이 시간을 기반으로 동작하는 Priority Queue라고 생각하면 된다. 즉 엘리먼트들이 Delay 시간을 기준으로 정렬되어 가장 빨리 딜레이 시간이 끝나는 엘리먼트가 큐의 헤드쪽에 위치한다. 큐에서 엘리먼트를 꺼낼 때, 엘리먼트의 딜레이 시간이 지나지 않았다면 소비할 수 없다. 이후 딜레이 시간이 0보다 작은 숫자가 리턴되면 그 때서야 엘리먼트를 꺼내 쓸 수 있다. DelayQueue 클래스 DelayQueue는 다음과 같은 상속 구조를 가지고 있다. public class Delay.. 2023. 5. 1.
[Java] LinkedHashMap 사용법 및 예제 - HashMap과 차이점 LinkedHashMap Map 인터페이스를 구현한 클래스 중에 TreeMap과 HashMap은 매우 단순해서 많이 사용된다. 그 외에 조금 특이한 Map 클래스들이 있는데 LinkedHashMap이 그 중 하나다. LinkedHashMap은 Map에 입력된 순서를 기억하는 자료구조다. LinkedHashMap에 저장되는 키와 값은 Map.Entry 클래스를 구현한 Node 클래스에 저장된다. Node 클래스에는 before, after 멤버가 있는데, LinkedHashMap에 입력된 순서에 따라 연결 리스트 구조를 형성한다. LinkedHashMap 사용법 LinkedHashMap은 기본적으로 HashMap이다. 사용법은 HashMap과 동일하다. HashMap에 대해서 정리해 놓은 포스트를 참고하자.. 2021. 6. 16.
[Java] TreeMap 사용법 및 예제 TreeMap TreeMap은 이진트리를 기반으로 Map 인터페이스를 구현한 컬렉션 클래스다. HashMap과 마찬가지로 키와 값(Key-Value) 쌍을 저장한다. HashMap은 키의 해시값을 기반으로 해시테이블을 구축하는 반면 TreeMap은 키 값을 이용해서 이진트리를 구축하고, 이진 트리의 노드에 값을 엔트리(Entry) 형태로 저장한다. 이진트리를 구축했기 때문에 키 값에 따라 정렬된 상태로 저장한다. TreeMap이 키와 값을 내부에 저장하는 이진트리는 '레드-블랙트리(Red-Black Tree)'로 구현되어있다. 일반적인 이진트리의 성질에 균형잡힌 트리(Balanced Tree)의 특성을 부여한 이진트리로 노드들이 트리의 전반에 걸쳐 고르게 분포된다. (이는 곧 Skew 되지 않음을 의미하.. 2021. 6. 14.
[Java] Vector 사용법 및 예제 Vector Vector 클래스는 ArraList 클래스처럼 List 인터페이스를 구현하고 있다. Vector 클래스는 ArrayList와 동일한 방법으로 데이터를 저장하고 있다. ArrayList처럼 저장 순서를 기억하고, 중복 데이터의 저장을 허용한다. 인덱스를 통해 특정 위치에 데이터를 추가하거나 특정 위치의 데이터를 제거할 수도 있다. Vector 객체 역시 데이터가 추가되면서 필요한 경우 자동으로 크기가 늘어나도록 구현되어 있다.(참고 : [Java] ArrayList 사용법 및 예제) ArrayList 클래스와 Vector 클래스는 큰 차이가 없다고 생각해도 된다. 다만 Vector 클래스는 멀티스레드 환경에서 동기화처리가 되어 있다. 반면 ArrayList 클래스는 멀티스레드 환경에 대한 고.. 2021. 5. 29.
[Java] PriorityQueue(우선순위 큐) 사용법 및 예제 Priority Queue(우선순위 큐) 일반적으로 '큐(Queue)'라는 자료구조는 먼저 들어온 순서대로 데이터가 소비된다. 즉 FIFO(First In First Out)의 동작을 갖는다. 큐와 비슷한 '우선순위 큐(Priority Queue)'라는 자료구조는 들어온 순서가 아닌 저장되어 있는 데이터 중 우선순위가 높은 순서대로 데이터가 소비된다. 'Priority Queue(우선순위 큐)'는 일반적으로 힙(Heap)이라는 자료구조를 이용해서 구현한다. 입력받은 데이터를 이용해서 최대힙 혹은 최소힙을 구성하고 데이터를 꺼낼때 루트노드에서 꺼낸다. 꺼내진 루트 노드에는 힙의 마지막 노드가 삽입되어 아래로 내려가면서 자기 자리를 찾아간다. Priority Queue는 내부적으로 힙을 이용해서 정렬된 상태.. 2021. 5. 28.
[Java] LinkedList 사용법 및 예제 list.remove(); // 첫 번째 값 제거 list.remove(3); // 3번째 값 제거 list.removeFirst(); // 첫번째 값 제거 list.lastFirst(); // 마지막 값 제거 list.clear(); // 모든 값 제거 LinkedList LinkedList(연결리스트)는 데이터가 저장되어 있는 노드(Node) 객체들을 참조 체인으로 엮어 놓은 자료구조다. LinkedList 객체 안쪽에는 노드들이 참조 체인으로 연결되어 있다. 각 노드들은 다음에 위치한 노드들의 참조를 들고 있다. 사용자는 LinkedList의 첫 번째 노드부터 따라가면서 원하는 데이터를 조회하게 된다. ArrayList와 다르게 중간에 데이터가 추가되거나 중간에 있는 데이터가 삭제되어도 앞으로 땡기.. 2021. 5. 27.
[Java] ArrayList 사용법 및 예제 ArrayList 자바 프로그램에서 데이터의 나열을 저장하기 위해서 List 인터페이스를 구현한 클래스를 사용한다. ArrayList는 List 인터페이스를 구현하는 리스트로 배열처럼 연속된 메모리 공간을 사용하며, 인덱스를 이용해서 특정위치의 데이터에 바로 접근할 수 있다. 한번 생성되면 크기가 변하지 않는 배열과는 달리 객체가 추가되면서 필요할 경우 자동으로 크기가 늘어나도록 내부적으로 구현되어 있다는게 ArrayList 클래스의 특징이다. 리스트 자료구조를 만들고 싶을 때, 가장 많이 사용되는 클래스다. ArrayList 사용법 ArrayList 생성 import java.util.ArrayList; 자바는 java.util.ArrayList 클래스를 통해 ArrayList를 제공하고 있다. Arr.. 2021. 5. 24.
[Java] Stack(스택) 사용법 및 예제 Stack(스택) 사전적으로 Stack(스택)은 '쌓다', '더미'라는 의미를 가지고 있다. 접시를 차곡차곡 쌓아 올리듯이 데이터를 쌓아올리는 형상을 생각하면 된다. Stack(스택)은 Queue(큐)와 함께 자바에서 사용되는 가장 기본적인 자료구조 중 하나다. Stack(스택)은 '마지막에 추가된 데이터가 가장 먼저 나오는' 특징을 가지고 있다. LIFO(Last In First Out) 동작이라고 한다. 함께 많이 사용되는 Queue(큐)의 경우 먼저 추가된 데이터가 먼저 나오는 FIFO(First In First Out) 동작을 갖는것과 비교된다. 일반적으로 스택에 데이터를 추가하는 동작은 'push'라고 하며, 스택에서 데이터를 빼는 동작은 'pop'이라고 한다. pop 메소드를 실행하면 가장 마.. 2021. 5. 23.