컬렉션 프레임워크
💡 컬렉션 : 여러 데이터의 집합(인터페이스, 클래스가 포함되어 있음)
💡 컬렉션 프레임워크 : 컬렉션을 다루는데 있어 편리한 메서드들을 미리 정의해놓은 것
컬렉션 워크의 장점
- 자료 구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 만든 것
- 위에 나열된 동작들을 수행하는 편리한 메서드를 제공
- 객체지향적이고 재사용성이 높은 코드를 작성할 수 있다.
컬렉션 프레임워크의 구조
- 주요 인터페이스 : List, Set, Map
Collection(List와 Set의 공통점이 추출되어 추상화 된 인터페이스)
➰List : 데이터 순서(O), 중복저장(O)
➰Set : 데이터 순서(X), 중복저장(X)
➰Map : 데이터 순서(X), 중복저장(△)
List:데이터 순서(O), 중복저장(O)
- 배열과 같이 객체를 일렬로 늘어놓은 구조
- 객체를 저장하면 자동으로 인덱스 부여
- 인덱스로 객체를 검색, 추가, 삭제할 수 있는 여러 기능을 제공
ArrayList
- 객체가 인덱스로 관리(0부터 시작)
- 기본 저장공간 10, 그 이후로는 1.5배씩 자동으로 저장용량이 늘어난다.
- 연속적인 데이터 존재(순서 유지)
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
- 특정 인덱스를 추가하거나 제거하면, 뒤에 인덱스부터 마지막까지 옮겨진다.
- 빈번한 객체 삭제 및 삽입이 일어나는 곳에는 비추!
LinkedList
- 데이터를 효율적으로 추가, 삭제, 변경하기 위해 사용
- 불연속적으로 존재하며 데이터들은 서로 연결되어 있다.
- 삭제나 추가시 'ArrayList'와 다르게 데이터를 이동, 복사할 필요가 없어 처리 속도가 상대적으로 빠르다.
ArrayList<타입 매개변수> 객체명 = new LinkedList<타입 매개변수>();
💡 데이터를 순차적으로 추가 및 삭제할 경우 👉 ArrayList
💡 데이터를 읽어들이는 경우 👉 ArrayList
💡 중간에 데이터를 추가하거나, 중간에 위치하는 데이터를 삭제하는 경우 👉 LinkedList
❗ 데이터의 잦은 변경이 예상된다면 👉 LinkedList
❗ 데이터의 개수가 변하지 않는다면 👉 ArrayList
Iterator
- 반복자
- 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할
- 컬렉션 인터페이스에 정의된 iterator()를 호출하면 Iterator타입의 인스턴스가 반환됨
- 컬렉션 인터페이스를 상속받는 List와 Set인터페이스는 iterator()메서드 사용 가능
ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
...
}
Set:데이터 순서(X), 중복저장(X)
HashSet:저장순서X, 순차정리X
- 중복 확인 메서드
- hashCode()
- equals()
TreeSet:저장순서x, 순차정리O
- 이진 탐색 트리 형태
- 하나의 부모노드가 최대 두개의 자식 노드와만 연결된다.(최상위 노드를 루트라고 함)
- 정렬과 검색에 특화된 자료구조
- 이진 탐색 트리의 모든 왼쪽 자식 값은 부모보다 작고, 오른쪽 자식의 값은 부모보다 크다.
- 자동적으로 오름차순으로 정렬해준다.
Map:데이터 순서(X), 중복저장(△)
- 키(key)와 값(value)로 구성된 객체(entry)를 저장하는 구조
- 키(key)는 중복 저장 X
- 값(value)는 중복 저장 O
-> 기존에 저장된 키와 동일한 키로 값을 저장하면 새로운 값으로 덮어씌워 진다.
HashMap
- Entry객체(key객체와 value객체를 가진)로 저장
- 함수를 통해 키와 값이 저장되는 위치를 지정하여, 사용자는 위치를 알 수 없다
- 저장되는 순서와 위치는 관계가 없다.
- 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보인다.
HashMap<String, Integer> hashmap = new HashMap<>();
💡 Map에서 iterator()를 사용하고 싶다면?
iterator()는 컬렉션 인터페이스에 존재하기 때문에 Map 인터페이스에서 사용이 불가하다.
👍 keyset()이나 entrySet()메서드를 이용해 Set형태로 형변환한 인스턴스를 생성하여 사용
Set<String> keySet = map.keySet();
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
컬렉션 메서드 모음
컬렉션 인터페이스
List
Iterator
Set
Map