- 컬렉션 프레임웍
Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있으며, Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer와 같은 wrapper클래스와 String,Date,File과 같은 것들이며 기본적으로 오름차순으로 정렬되도록 구현되어 있다. ( Comparable을 구현한 클래스는 정렬이 가능하다는 것을 의미)
Comparable을 구현한 클래스들이 기본적으로 오름차순으로 정렬되어 있지만 다른 기주에 의해서 정렬되도록 하고 싶은 경우 Comparator를 구현해서 정렬기준을 제공할 수 있다.
Comparable : 기본 정렬기준을 구현하는데 사용
Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할떄 사용
Arrays.sort()는 Compartor를 지정해주지 않으면 저장하는 객체에 구현된 내용에 따라 정렬된다. ( 주로 Comparable을 구현한 클래스의 객체 )
static void sort(Object[] a) //객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) //지정한 Comparator에 의한 정렬
String의 Comparable구현은 문자열이 사전 순으로 정렬되도록 작성되어 있다. 공백,숫자,대문자,소문자의 순으로 정렬되며 정확히는 유니코드의 순서가 작은 값에서부터 큰 값으로 정렬되는 것이다. ( 대소문자의 구분 없이 비교 - CASE_INSENSITIVE_ORDER )
HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이며, Set인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. HashSet은 저장순서를 유지하지 않는다. ( 유지 - LinkedHashSet )
TreeSet은 이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다. Set인터페이스를 구현했으므로 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.
Hashtable보다는 새로운 버전인 HashMap을 사용할 것을 권한다. Map의 특징인 키와 값을 묶어서 하나의 데이터로 저장한다는 특징을 갖는다. 그리고 해싱을 사용하기때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다.
HashMap은 Entry라는 내부 클래스를 정의하고, 다시 Entry타입의 배열을 선언하고 있다. 키와 값은 별개의 값이 아니라 서로 관련된 값이기 때문에 각각의 배열로 선언하기 보다는 하나의 클래스로 정의해서 하나의 배열로 다루는 것이 데이터의 무결성적인 측면에서 더 바람직하기 때문이다.
HashMap은 키와 값을 각각 Object타입으로 저장한다.
Key : 컬렉션 내의 키 중에서 유일해야 한다.
Value : 키와 달리 데이터의 중복을 허용한다.
해싱이란 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법을 말한다. 해시함수는 데이터가 저장되어 있는 곳을 알려주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다. 해싱을 구현한 컬렉션클래스로는 HashSet,HashMap 등이 있다.
TreeMap은 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다. 검색에 관한 대부분의 경우에서 HashMap이 TreeMap보다 더 뛰어나므로 HashMap을 사용하는 것이 좋다.
Hashtable을 상속받아 구현한 것으로, Hashtable은 키와 값을 (Object,Object)의 형태로 저장하는데 비해 Properties는 (String,String)의 형태로 저장하는 보다 단순화된 컬렉션클래스이다. 주로 애플리케이션 환경설정과 같은 속성을 저장하는데 사용된다.
Collcetions는 컬렉션과 관련된 메서드를 제공한다.
멀티쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성을 유지하기 위해서는 공유되는 객체에 동기화가 필요하다. 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections클래스의 동기화 메서드를 이용해서 동기화처리가 가능하도록 변경하였다. synchronizedXX()
를 사용한다.
컬렉션에 저장된 데이터를 보호하기 위해서 읽기전용으로 만들어야 할 때가 있다. unmodifiableXX()
를 사용한다.
단 하나만의 객체를 저장하는 컬렉션을 만들고 싶은 경우 singletoneXX()
를 사용한다.
checkedXX(XX xx , Class type)
를 사용한다. 두번째 매개변수에 저장할 객체의 클래스를 지정하면 된다.
컬렉션 | 특 징 |
---|---|
ArrayList | 배열기반, 데이터의 추가와 삭제에 불리, 순차적인 추가삭제는 제일 빠름, 임의의 요소에 대한 접근성이 뛰어남 |
LinkedList | 연결기반. 데이터의 추가와 삭제에 유리. 임의의 요소에 대한 접근성이 좋지 않다. |
HashMap | 배열과 연결이 결합된 형태, 추가,삭제,검색,접근성이 모두 뛰어남. 검색에는 최고성능을 보인다. |
TreeMap | 연결기반. 정렬과 검색에 적함. 검색 성능은 HashMap보다 떨어짐 |
Stack | Vector를 상속받아 구현 |
Queue | LinkedList가 Queue인터페이스를 구현 |
Properties | Hashtable을 상속받아 구현 |
HashSet | HashMap을 이용해서 구현 |
TreeSet | TreeMap을 이용해서 구현 |
LinkedHashMap LikedHashSet | HashMap과 HashSet에 저장순서유지기능을 추가 |