Data Structure - '일련의 일정 타입들의 데이터 모임 또는 관계를 나타낸 구성체'
어떤 알고리즘 문제를 풀기 위해 문제를 해석한 다음 보통 자료구조를 선택한다. 자료구조를 선택하면 해당 자료구조에 맞는 알고리즘을 선텍하는데 보다 더 효율적인 알고리즘을 선택할 수 있다는 장점이 있다.(선후 관계가 바뀔 수 있다.)
점선은 구현관계이고, 실선은 확장 관계이다. (인터페이스 끼리는 다중 상속이 가능하다.) Collection을 구현한 클래스 및 인터페이스는 모드 java.util 패키지에 있다.
대표적인 선형 자료구조로 주로 순서가 있는 데이터를 목록으로 이용할 수 있도록 만들어진 인터페이스이다.
배열의 기능 + 동적 크기 할당
/*
T는 객체 타입을 의미하며 기본적으로
Integer, String, Double, Long 같은 Wrapper Class부터
사용자 정의 객체까지 가능하다.
ex) LinkedList<Integer> list = new LinkedList<>();
primitive type은 불가능하다.
*/
// 방법 1
ArrayList<T> arraylist = new ArrayList<>();
LinkedList<T> linkedlist = new LinkedList<>();
Vector<T> vector = new Vector<>();
Stack<T> stack = new Stack<>();
// 방법 2
List<T> arraylist = new ArrayList<>();
List<T> linkedlist = new LinkedList<>();
List<T> vector = new Vector<>();
List<T> stack = new Stack<>();
// Stack은 Vector를 상속하기 때문에 아래와 같이 생성할 수 있다.
Vector<T> stack = new Stack<>();
선형 자료구조로 주로 순서가 있는 데이트럴 기반으로 선입선출(FIFO : First-in First-out)을 위해 만들어진 인터페이스이다.
Queue는 한쪽 방향으로만(단방향) 삽입,삭제가 가능한 반면, Deque은 Double ended Queue라는 의미로 양쪽에서 삽입,삭제가 가능한 자료구조이다.
LinkedList는 List(리스트)를 구현하기도 하지만, Deque(덱)도 구현한다. 그리고 Deque Interface는 Queue Interface를 상속받는다.
즉, LinkedList는 사실상 3가지 용도로 쓸 수 있다.
1. List
2. Deque
3. Queue
Deque 또는 Queue를 LinkedList 처럼 Node 객체로 연결해서 관리하길 원한다면 LinkedList를 쓰면 된다. 원리 자체는 크게 다르지 않기 때문에 LinkedList 하나에 다중 인터페이스를 포함하고 있는 것이다.
일반적인 큐와 덱을 사용하고자 한다면 LinkedList로 생성해서 선언하면 된다.Queue<T> queue = new LinkedList<>(); Deque<T> deque = new LinkedList<>();
/*
T는 객체 타입을 의미하며 기본적으로
Integer, String, Double, Long 같은 Wrapper Class부터
사용자 정의 객체까지 가능하다.
단, primitive type은 불가능하다.
*/
ArrayDeque<T> arraydeque = new ArrayDeque<>();
PriorityQueue<T> priorityqueue = new PriorityQueue<>();
Deque<T> arraydeque = new ArrayDeque<>();
Deque<T> linkedlistdeque = new LinkedList<>();
Queue<T> arraydeque = new ArrayDeque<>();
Queue<T> linkedlistdeque = new LinkedList<>();
Queue<T> priorityqueue = new PriorityQueue<>();
데이터를 중복해서 저장할 수 없고, 입력 순서대로의 저장 순서를 보장하지 않는다. (다만 LinkedHashSet은 입력 순서대로 저장순서를 보장한다.)
/*
T는 객체 타입을 의미하며 기본적으로
Integer, String, Double, Long 같은 Wrapper Class부터
사용자 정의 객체까지 가능하다.
단, primitive type은 불가능하다.
*/
HashSet<T> hashset = new HashSet<>();
LinkedHashSet<T> linkedhashset = new LinkedHashSet<>();
TreeSet<T> treeset = new TreeSet<>();
SortedSet<T> treeset = new TreeSet<>();
Set<T> hashset = new HashSet<>();
Set<T> linkedhashset = new LinkedHashSet<>();
Set<T> treeset = new TreeSet<>();
출처 및 참고 : https://st-lab.tistory.com/142