본문 바로가기

프로그래밍언어/JAVA

[JAVA] Collections

반응형

1. Collections

 

Collections 는 컬렉션과 관련된 메서드를 제공한다. fill(), copy(), sort(), binarySearch() 등의 메서드는 두 클래스에 모두 포함되어 있으며 같은 기능을 한다.

 

- 컬렉션의 동기화

 

멀티쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있다. 그렇기 때문에 데이터의 일관성, consistency 를 유지하기 위해 공유되는 객체에 동기화, synchronization 이 필요하다.

 

Vector 와 Hashtable 과 같은 구버전 클래스들은 자체적으로 동기화 처리가 되어있다. 그렇기 때문에 멀티쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능에 불리하다.

 

이후에 추가된 ArrayList 와 HashMap 과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections 클래스의 동기화 메서드를 이용해서 동기화 처리가 가능하도록 변경하였다.

static Collection synchronizedCollection(Collection c)
static List synchronizedList(List list)
static Set synchronizedSet(Set s)
static Map synchronizedMap(Map m)
static SortedSet synchronizedSortedSet(SortedSet s)
static SortedMap synchronizedSortedMap(SortedMap m)

 

collections 에는 위와같은 동기화 메서드를 제공한다. 이러한 메서드를 사용하는 방법은 다음과 같다.

// synchronized 된 ArrayList 생성
List syncList = Collections.synchronizedList(new ArrayList( ... ));

 

- 변경불가 컬렉션 생성

 

컬렉션에 저장된 데이터를 보호하기 위해 컬렉션을 읽기전용으로 생성해야할 때가 있다. 이럴때는 아래의 메서드들을 사용하면 된다.

static Collection unmodifiableCollection(Collection c)
static List unmodifiableList(List list)
static Set unmodifiableSet(Set s)
static Map unmodifiableMap(Map m)
static NavigableSet unmodifiableNavigableSet(NavigableSet s)
static SortedSet unmodifiableSortedSet(SortedSet s)
static NavigableMap unmodifiableNavigableMap(NavigableMap m)
static SortedMap unmodifiableSortedMap(SortedMap m)

 

- 싱글톤 컬렉션 생성

 

인스턴스의 메서드로 생성할 때, 인스턴스의 개수를 제한하는 기능을 제공하는 것이 singleton 으로 시작하는 메서드들이다.

static List singletonList(Object o)
static Set singleton(Object o)
static Map singletonMap(Object key, Object value)

 

- 한 종류의 객체만 저장하는 컬렉션 생성

 

컬렉션에 저장할 수 있는 데이터의 종류를 지정하기 위해서는 다음의 메서드를 사용하면 된다.

static Collection checkedCollection(Collection c, Class type)
static List checkedList(List list, Class type)
static Set checkedSet(Set s, Class type)
static Map checkedMap(Map m, Class keyType, Class valueType)
static Queue checkedQueue(Queue queue, Class type)
static NavigableSete checkedNavigableSet(NavigableSet s, Class type)
static SortedSet checkedSortedSet(SortedSet s, Class type)
static NavigableMap checkedNavigableMap(NavigableMap m, Class keyType, Class valueType)
static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)

 

사용방법은 다음과 같다.

List list = new ArrayList();
List checkedList = checkedList(list, String.class);
checkedList.add("abc"); // 저장 성공
checkedList.add(new Integer(3)); // error 발생

 

 

2. 컬렉션 클래스 정리 & 요약

 

컬렉션 특징
ArrayList 배열 기반의 컬렉션. 데이터의 추가와 삭제에 불리하다. 순차적인 추가삭제는 제일 빠르며 임의의 요소에 대한 접근성이 뛰어나다.
LinkedList 노드들의 연결 기반의 컬렉션. 데이터의 추가와 삭제에 유리하다. 임의의 요소에 대한 접근성이 좋지않다.
HashMap 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 접근성이 모두 뛰어나다. 검색에는 제일 좋은 성능을 보인다.
TreeMap 연결 기반의 트리 구조의 컬렉션. 정렬과 범위검색에 적합하다. 검색 성능은 HashMap 보다 떨어진다.
Stack Vector 를 상속받아서 구현한 컬렉션 클래스
Queue LinkedList 가 Queue 인터페이스를 구현한 컬렉션 클래스
Properties Hashtable 을 상속받아 구현한 컬렉션 클래스
HashSet HashMap 을 이용해서 구현한 컬렉션 클래스
TreeSet TreeMap 을 이용해서 구현한 컬렉션 클래스
LinkedHashMap
LinkedHashSet
HashMap 과 HashSet 에 저장 순서 유지 기능을 추가하였다.
반응형

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] Enums  (0) 2022.02.21
[JAVA] Generics  (0) 2022.02.16
[JAVA] Properties  (0) 2022.02.04
[JAVA] TreeMap  (0) 2022.02.04
[JAVA] HashSet, TreeSet  (0) 2022.01.29