프로그래밍에서 자주 사용하는 자료구조(리스트, 맵, 스택, 큐 등)를 자바에서 미리 정의해둔 클래스들
인터페이스와 다형성을 이용했기 때문에 내부 메서드가 비슷한 경향이 있다.
자료구조란 데이터를 저장하는 방식의 차이이다.
컬렉션의 상속 계층표는 아래와 같다.

내부적으로 배열을 사용해서 데이터를 저장하기 때문에 배열의 특징을 일부 가지고 있다.
- 배열과 마찬가지로 처음에 만들 때는 크기가 정해져있지만, 추가 공간이 필요하면 공간을 늘릴 수 있다. (가변 길이 배열)
- ArrayList는 배열이 꽉차면 더 큰 배열을 만들어서 기존 배열의 값을 옮겨 담는다.
- 저장된 데이터의 크기: size
- 실제 내부 데이터 저장공간 크기: capacity, default: 10
- 조회가 빠르다(Index로 바로 접근)
- 저장순서 유지
- 중복 가능
- 삽입, 삭제가 느리다(중간 값이 바뀌면 배열 내부 정리 필요)
- 스레드 세이프 하지 않다(동기화 안됨) -> 성능저하
키 : 밸류 한 쌍으로 데이터를 저장하는 자료 구조
Map을 상속받아 구현한 것으로, 키:밸류를 매칭하는 알고리즘으로 Hashing을 사용한다.
- 값을 가져올 땐 키로 호출하여 가져온다.
- 기존 키에 새로운 밸류를 넣으면 덮어쓰기가 된다.
Javascript Object Notation의 약자로, List와 Map을 사용하여 데이터를 주고 받는 하나의 포맷
Json 형태의 문자열에서 {}는 Map, []는 List형태로 받을 수 있다.
스프링을 사용하면 내부적으로 Jackson 라이브러리를 통해 쉽게 Object로 바꿀 수 있다.
중복이 없는 리스트 형태
LIFO 구조, 나중에 넣은 데이터가 먼저 나오는 구조이다
메모리 중 일부가 Stack 구조로 동작(메소드 호출, 함수 호출)
FIFO 구조, 처음에 넣은 데이터가 제일 먼저 나오는 구조
작업 목록등에 사용, 코드보다는 개념이 중요하다.
우선순위 큐, 저장 시 우선순위를 부여해서 정렬 후 저장하여 우선순위대로 내보낸다
List 와 Queue를 모두 상속받았기 때문에 두 가지 기능 모두 사용 가능한 자료구조이다.
데이터의 중간에 삽입, 삭제할 때 성능이 좋다
자바에서는 양방향 연결 리스트 형태로 되어있다.
Vector는 ArrayList, HashTable은 HashMap의 구버전 자료구조이다.
잘 사용하진 않지만 둘 다 멀티 스레드 환경에서 synchronized를 제공하는데, Synchronized가 되어있어도 ArrayLisr가 더 성능이 좋다.
와우..