배열의 문제점(크기가 고정적)을 해결하기 위해, 객체나 데이터들을 효율적으로 관리하기 위해서 자료구조를 만들었고, 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 한다.
컬렉션 프레임워크는 위와 같은 구조로 이루어져있다. 대표적으로 List, Set, Map 인터페이스로 구성되어 있으며, 여러 클래스가 해당 인터페이스를 구현하거나 다른 인터페이스가 상속받는 구조이다.
Map
인터페이스 컬렉션들은 두개의 데이터를 묶어 한 쌍으로 다루기 때문에 List, Set과 달리 Collection 인터페이스와 따로 분리되어 있다.
List, Queue, Set, Map 등의 인터페이스를 제공하고, 이를 구현하는 클래스를 제공하여 일관된 API 를 사용할 수 있다.
가변적인 저장 공간을 제공
자료구조, 알고리즘을 구현하기 위한 코드를 직접 작성할 필요 없이, 이미 구현된 컬렉션 클래스를 목적에 맞게 선택하여 사용
제공되는 API 의 코드는 검증되었으며, 고도로 최적화
인덱스 순서로 요소를 저장한다. 중복된 데이터를 저장할 수 있다.
List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다.
메소드 | 설명 |
---|---|
boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 변경 |
boolean contains(Object o) | 주어진 객체가 있는지에 대한 여부를 검색 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 |
isEmpty() | 컬렉션이 비어있는지 여부를 확인 |
int size() | 저장되어 있는 전체 객체 수를 리턴 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 |
void clear() | 주어진 인덱스에 저장된 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
➡ List 클래스의 자료구조들 자세한 사용법은 이 블로그 글을 참고했다.
자바 ArrayList 사용법 & 예제
자바 LinkedList 사용법 & 예제
자바 Vector 사용법 & 예제
ArrayList는 순차적인 접근으로 조회가 빠르며, 리스트 자료구조를 사용한다면 기본적으로 ArrayList를 선택한다. 중간에 데이터를 insert를 해야할 경우가 많다면 ArrayList보다는 LinkedList가 유용.
List 컬렉션은 선형 구조를 가지고 있어 추가한 순서대로 저장이 되어 순서를 유지했지만, Set 컬렉션은 저장 순서가 유지되지 않는다. 순서가 없으므로 인덱스로 객체를 검색해서 오는 get(index) 메소드도 존재하지 않는다.
또한 Set 컬렉션은 객체를 중복해서 저장할 수 없고, null값도 하나만 저장 가능.
메소드 | 설명 |
---|---|
boolean add(E e) | 주어진 객체를 저장 후 성공적이면 true를 중복 객체면 false를 리턴 |
boolean contains(Object o) | 주어진 객체가 저장되어있는지 여부를 리턴 |
Iterator iterator() | 저장된 객체를 한번씩 가져오는 반복자를 리턴 |
isEmpty() | 컬렉션이 비어있는지 조사 |
int Size() | 저장되어 있는 전체 객체수를 리턴 |
void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
➡ List 클래스의 자료구조들 자세한 사용법은 이 블로그 글을 참고했다.
Java HashSet 사용법
Java TreeSet 사용법
Map 컬렉션은 키(key)와 값(value) 쌍으로 데이터를 저장한다. 키는 중복으로 저장할 수 없고 값은 중복으로 저장할 수 있으며, 중복된 key값이 들어온다면 기존의 값은 없어지고 새로운 값으로 대치된다. 저장 순서가 유지되지 않는다.