공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

 

컬렉션 프레임워크 계층 다이어그램

 

컬렉션 프레임워크(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 인터페이스는 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하는 데 사용된다.  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 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는 데 사용된다.  Set 인터페이스를 구현한 클래스로는  HashSet  TreeSet 등이 있다.

 

 

 

 

Map 인터페이스(Interface)

 

Map의 상속계층도

   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 저장순서유지기능을 추가

 

 

 

+ Recent posts