공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.

컬렉션 프레임워크(Collections Framework)
데이터들을 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다.
컬렉션 프레임워크의 핵심 인터페이스

인터페이스 List 와 Set 을 구현한 컬렉션 클래스들은 공통부분이 많아서, 공통된 부분을 모은 Collection 인터페이스가 정의되어있다. Map 은 이들과 다른 형태로 컬렉션을 다루기 때문에 상속되지 않는다.
| 인터페이스 | 특 징 | 구현클래스 |
| List | 순서가 있는 데이터의 집합, 데이터의 중복을 허용 | ArrayList , LinkedList , Stack , Vector 등 |
| Set | 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 X | HashSet , TreeSet , SortedSet 등 |
| Map | 키( key )와 값( value )의 쌍(pair)로 이뤄진 데이터의 집합 순서는 유지되지 않으며, 값의 중복은 허용되지만 키의 중복은 허용하지 X |
HashMap , TreeMap , Hashtable , LinkedHashMap , SortedMap , Properties 등 |
컬렉션 프레임 워크의 모든 컬렉션 클래스들은 List , Set , Map 중의 하나를 구현하고 있으며, 구현한 인터페이스의 이름이 클래스 이름에 포함되지만 Vector , Stack , Hashtable , Properties 와 같은 클래스들은 컬렉션 프레임워크가 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임워크의 명명법을 따르지 않는다.
Vector 나 Hashtable 과 같은 기존의 컬렉션 클래스들은 호환을 위해 남겨진 것이므로 가급적 사용하지 않는 것이 좋다. 새로 추가된 ArrayList 와 HashMap 을 사용하면 된다.
Collection 인터페이스(Interface)
List 와 Set 의 부모인 Collection 인터페이스에는 아래와 같은 메서드들이 정의되어 있다. 반환 타입이 boolean 인 메서드들은 작업을 성공하거나 사실이면 true 를, 그렇지 않으면 false 를 반환한다.
| 메서드 | 설 명 |
| boolean add(Obect o) boolean addAll(Collection c) |
지정된 객체( o ) 또는 Collection(c) 의 객체들을 Collection 에 추가 |
| void clear( ) | Collection 의 모든 객체 삭제 |
| boolean contains(Object o) boolean containsAll(Collection c) |
지정된 객체( o ) 또는 Collection 의 객체들이 Collection 에 포함되어 있는지 확인 |
| boolean equals(Object o) | 동일한 Collection 인지 비교 |
| int hashCode( ) | Collection 의 hash code를 반환 |
| boolean isEmpty( ) | Collection 이 비어있는지 확인 |
| Iterator iterator( ) | Collection 의 Iterator 를 얻어서 반환 |
| boolean remove(Obejct o) | 지정된 객체 삭제 |
| boolean removeAll(Collection c) | 지정된 Collection 에 포함된 객체들을 삭제 |
| boolean retainAll(Collection c) | 지정된 Collection 에 포함된 객체만을 남기고 다른객체들은 Collection 에서 삭제 (이 작업으로 Collection 에 변화가 있으면 true , 없으면 false 반환) |
| int size( ) | Collection 에 저장된 객체의 개수 반환 |
| Object[ ] toArray( ) | Collection 에 저장된 객체를 객체배열( Object[ ] )로 반환 |
| Object[ ] toArray(Object[ ] a) | 지정된 배열에 Collection 의 객체를 저장해서 반환 |
List 인터페이스(Interface)

List 인터페이스는 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하는 데 사용된다. List 인터페이스에 정의된 메서드는 아래와 같다.( Collection 인터페이스로부터 상속받은 것들은 제외)
| 메서드 | 설 명 |
| void add(int index, Object element) boolean addAll(int index, Collection c) |
지정된 위치( index )에 객체( element )또는 컬렉션에 포함된 객체들을 추가 |
| Object get(int index) | 지정된 위치( index )에 있는 객체를 반환 |
| int indexOf(Object o) | 지정된 객체의 위치( index )를 반환 ( List 의 마지막 요소부터 역방향으로 찾는다.) |
| ListIterator listIterator( ) ListIterator listIterator(int index) |
List 의 객체에 접근할 수 있는 ListIterator 를 반환 |
| Object remove(int index) | 지정된 위치( index )에 있는 객체를 삭제하고 삭제된 객체를 반환 |
| Object set(int index, Object element) | 지정된 위치( index )에 객체( element )를 저장 |
| void sort(Comparator c) | 지정된 비교자( comparator )로 List 를 정렬 |
| List subList(int fromIndex, int toIndex) | 지정된 범위( fromIndex 부터 toIndex )에 있는 객체를 반환 |
Set 인터페이스(Interface)

Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는 데 사용된다. Set 인터페이스를 구현한 클래스로는 HashSet , TreeSet 등이 있다.
Map 인터페이스(Interface)

Map 인터페이스는 키( key )와 값( value )을 하나의 쌍으로 저장하는 컬렉션 클래스를 구현하는 데 사용된다. 값은 중복될 수있지만 키의 중복은 허용하지 않는다. 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 된다. Map 인터페이스를 구현한 클래소르는 Hashtable , HashMap , LinkedHashMap , SortedMap , TreeMap 등이 있다.
| 메서드 | 설 명 |
| void clear( ) | Map 의 모든 객체를 삭제 |
| boolean containsKey(Object key) | 지정된 key 객체와 일치하는 Map 의 Key 객체가 있는지 확인 |
| boolean containsValue(Object value) | 지정된 value 객체와 일치하는 Map 의 value 객체가 있는지 확인 |
| Set entrySet( ) | Map 에 저장되어 있는 key - value 쌍을 Map.Entry 타입의 객체로 저장한 Set 으로 반환 |
| boolean equals(Object o) | 동일한 Map 인지 비교한다. |
| Object get(Object key) | 지정한 key 객체에 대응하는 value 객체를 찾아서 반환 |
| int hashCode( ) | 해시코드 반환 |
| boolean isEmpty( ) | Map 이 비어있는지 확인 |
| Set keySet( ) | Map 에 저장된 모든 key 객체를 반환 |
| Object put(Object key, Object value) | Map 에 value 객체를 key 객체에 연결(mapping)하여 저장 |
| void putAll(Map t) | 지정된 Map 의 모든 key - value 쌍을 추가 |
| Object remove(Object key) | 지정된 key 객체와 일치하는 key - value 객체를 삭제 |
| int size( ) | Map 에 저장된 key - value 쌍의 개수 반환 |
| Collection values( ) | Map 에 저장된 모든 value 객체를 반환한다. |
Map 인터페이스에서 값( value )은 중복을 허용하기 때문에 Collection 타입으로 반환하고, 키( key )는 중복을 허용하지 않기 때문에 Set 타입으로 반환한다.
Map.Entry인터페이스
public interface Map{
...
interface Entry{
Object getKey();
Object getValue();
Object setValue(Object value);
boolean equals(Object o);
int hashCode();
...
}
}
Map.Entry 인터페이스는 Map 인터페이스의 내부인터페이스이다. (클래스 안에 내부클래스를 정의할 수 있는 것처럼 인터페이스도 인터페이스 안에 내부 인터페이스(inner interface)를 정의할 수 있다.) Map 에 저장되는 key - value 쌍을 다루기 위해 내부적으로 Entry 인터페이스가 정의되어 있다. 보다 객체지향적인 설계를 하도록 유도한 것으로 Map 인터페이스를 구현하는 클래스에서는 Map.Entry 인터페이스도 함께 구현해야 한다. 위의 코드는 Map 인터페이스 소스코드의 일부이다.
| 메서드 | 설 명 |
| boolean equals(Object o) | 동일한 Entry 인지 비교 |
| Object getKey( ) | Entry 의 key 객체를 반환 |
| Object getValue( ) | Entry 의 value 객체를 반환 |
| int hashCode( ) | Entry 의 해시코드 반환 |
| Object setValue(Object value) | Entry 의 value 객체를 지정된 객체로 바꾼다. |
컬렉션 클래스 정리

각 컬렉션 클래스마다 장단점이 있으므로 상황에 적합한 것을 사용하면 된다.
■ 컬렉션 클래스의 특징
| 컬 렉 션 | 특 징 |
| ArrayList | 배열기반, 데이터의 추가와 삭제에 불리(순차적인 추가삭제는 제일 빠름). 임의의 요소에 대한 접근성(accessibility)이 뛰어남 |
| LinkedList | 연결기반. 데이터의 추가와 삭제에 유리 임의의 요소에 대한 접근성이 좋지 않다. |
| HashMap | 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에 최고의 성능 |
| TreeMap | 연결기반 정렬과 검색(특히 범위검색)에 적함. 검색성능은 HashMap보다 떨어짐 |
| Stack | Vector 를 상속받아 구현 |
| Queue | LinkedList 가 Queue 인터페이스를 구현 |
| Properties | Hashtable 을 상속받아 구현 |
| HashSet | HashMap 을 이용해서 구현 |
| TreeSet | TreeMap 을 이용해서 구현 |
| LinkedHashMap LinkedHashSet |
HashMap 과 HashSet 에 저장순서유지기능을 추가 |
'Back end > Java' 카테고리의 다른 글
| [Java] 연결리스트(Linked List)와 이중 연결리스트(Doubly linked list), 이중 원형 연결리스트(Doubly circular linked list) (0) | 2019.07.19 |
|---|---|
| [Java] ArrayList (0) | 2019.07.18 |
| [Java] java.math 패키지 - BigInteger클래스와 BigDecimal 클래스 (0) | 2019.07.17 |
| [Java] java.util 패키지 - 정규식(Regular Expression)과 기타 클래스 (0) | 2019.07.16 |
| [Java] java.lang 패키지 - 래퍼 클래스 (Wrapper Class) (0) | 2019.07.16 |