객체(요소)를 수집해서 저장하는 것
저장할 수 있는 객체의 수는 배열 생성 시 결정되어 불특정 다수의 객체 저장하기 어려움
객체 삭제한 경우 해당 인덱스가 비어 객체 저장하려면 어디가 비어있는지 확인한 다음 빈 자리에 넣어야 함
java.util
패키지에 포함되어 객체를 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리이며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용
인덱스로 관리되어 중복된 객체 저장 가능
ArrayList
, Vector
, LinkedList
초기 용량 지정 가능하며 저장 용량 초과한 객체들이 들어오면 자동적으로 확대되며 객체 제거 시에는 삭제되는 객체 뒤의 요소들은 모두 인덱스가 1씩 당겨짐
List<T> list = Arrays.asList(T... a);
스레드 동기화가 되어 있기 때문에 복수의 스레드가 동시에 Vector에 접근해 객체를 추가/삭제하더라도 스레드에 안전함
인접 참조를 링크해서 체인처럼 관리하기 때문에 특정 인덱스에서 객체를 추가/제거하게 되면 바로 앞뒤 링크만 변경하면 되며, 빈번한 객체 삽입, 삭제가 일어날 때 효율적임
집합과 유사하며 저장 순서는 유지되지 않고, 객체 중복 저장이 불가능하여 하나의 null만 저장 가능
인덱스로 객체를 검색해서 가져오는 메소드가 없는 대신 전체 객체를 한번씩 반복해서 가져오는 iterator를 제공
HashSet
,LinkedHashSet
,TreeSet
동일 객체 및 동등 객체는 중복 저장하지 않으며
동등 객체 판단 방법은 hashCode() 리턴값과 비교해 equal()이 true인 경우는 동등 객체, false인 경우는 다른 객체
key-value로 구성된 Map.Entry
객체 저장 구조로 키와 값은 모두 객체
키는 중복될 수 없지만 값은 중복 가능함
HashMap
,Hashtable
,LinkedHashMap
,Properties
,TreeMap
키 객체는 hashCode(), equals()를 재정의해 동등 객체가 될 조건을 정해야 하며, String 타입의 객체를 주로 사용함
키 객체는 hashCode(), equals()를 재정의하여 동등 객체가 될 조건을 정해야하며, 스레드 동기화가 되어있기 때문에 복수의 스레드가 동시에 hashtable에 접근하여 객체 추가, 삭제하더라도 스레드에 안전함
키와 값을 String 타입으로 제한한 Map 컬렉션으로 .proterties
파일을 읽어들일 때 주로 사용함
옵션 / 데이터베이스 연결 / 국제화(다국어) 정보를 기록한 텍스트 파일로, 애플리케이션에서 주로 변경이 잦은 문자열을 저장해 유지 보수 편리하게 만들어줌
부모 노드와 자식 노드로 구성되어 왼쪽 자식 노드는 부모보다 작은 값, 오른쪽 자식 노드는 부모보다 큰 값을 가짐
따라서 부모 노드를 기준으로 범위 검색이 쉽고 정렬이 쉬움
오름차순 정렬인 경우 왼쪽노드 > 부모노드 > 오른쪽노드, 내림차순 정렬인 경우 오른쪽노드 > 부모노드 > 왼쪽노드
TreeSet<E> treeSet = new TreeSet<E>();
이진 트리를 기반으로 한 Set Collection으로 왼쪽, 오른쪽 자식 노드를 참조하기 위해 두개의 변수로 구성되어 있음
특정 객체 찾는 메소드 : first(), last(), lower(), higher(),..
정렬 메소드 : descendingIterator(), descendingSet()
범위 검색 메소드 : headSet(), tailSet(), subSet()
TreeMap<K, V> treeMap = new TreeMap<K, V>();
이진 트리를 기반으로 한 Map Collection으로 키와 값이 저장된 Map.Entry를 저장하며 왼쪽, 오른쪽 노드를 참조하기 위해 두개의 변수로 구성됨
단일 노드 객체 찾는 메소드 : firstEntry(), lastEntry(), lowerEntry(), higherEntry()
정렬 메소드 : descendingKeySet(), descendingMap()
범위 검색 메소드 : headMap(), tailMap(), subMap()
TreeSet 객체와 TreeMap 키는 저장과 동시에 자동 오름차순 정렬되며, 그렇기 때문에 저장할 객체의 타입은 Comparable을 구현한 타입의 객체여야 함
사용자 정의 객체를 정렬하고 싶다면
후입선출(Last In First Out) 구조로 push, peek, pop 등의 메소드로 이용
선입선출(First In First Out) 구조로 offer, peek, poll 등의 메소드로 이용
비동기화된 컬렉션을 동기화된 컬렉션으로 매핑
List<T> list = Collections.synchronizedList(new ArrayList<T>());
Set<E> set = Collections.synchronizedList(new HashSet<E>());
Map<K, V> map = Collections.synchronizedMap(new HashMap<K, V>());