앞서 배열을 다룰 때, 동일 타입의 데이터를 연속된 메모리 공간에서 관리한다고 했다.(동형집합)
객체지향의 특징에서 다뤘던 다형성에서는 부모 타입으로 자식 객체를 참조할 수 있다고 했다.(이형집합)
다만, 배열은 immutable하기 때문에 한번 선언된 크기를 변경할 수는 없다는 단점이 있다.
이러한 문제점을 해결하기 위해 Collection Framework을 통해 Java가 제공하는 자료구조를 사용한다.
Iterable <- Collection을 상속받는 List,Set과 독립적인 Map 인터페이스가 존재한다.
ArrayList VS LinkedList
이 둘의 가장 큰 차이점은 배열 기반인지, 노드 기반인지로 나눌 수 있다.
즉 ArrayList는 내부적으로 Object 배열을 사용하기 때문에 배열의 단점(삽입,삭제)가 그대로 존재한다.
LinkedList는 이러한 물리적 연속성의 한계를 극복하기 위해 링크 기반의 논리적 연결관계로 List를 구현했다.
Stack VS Queue
Stack은 후입선출(LIFO)구조로 데이터의 삽입,삭제,탐색의 위치가 같다.(last)
Queue는 선입선출(FIFO)구조로 데이터의 삽입되는 위치와 삭제,탐색의 위치가 다르다.
PriorityQueue -> heap
일반적인 Queue는 선입선출의 방식을 따르지만, 우선순위 큐는 비교기준자(Comparator,Comparable)에 의해 우선순위가 결정되어 해당 순위대로 꺼낸다.
Compartor, Comparable
- int compare(T t1, T t2)
- int compareTo(T t)
두 객체가 같으면 0, 비교값보다 작으면 음수, 비교값보다 크면 양수를 반환해야 한다.
두 객체가 같다? equals && hashcode