컬렉션 프레임워크 - accidentlywoo/java GitHub Wiki

컬렉션 프레임워크

  1. 컬렉션 프레임워크의 정의 및 인터페이스와 클래스들의 종류와 특징을 이해하고 설명할 수 있다.
  2. Map 컬렉션의 특징을 이해하고 설명할 수 있다.

컬렉션 프레임워크

자료구조

일정한 규칙에 의해 데이터들이 모아져 있는 것을 의미함

배열 : 자료구조 중에서 가장 기본이고 단순한 구조이며 동일한 타입의 데이터들의 집합 --몇가지 제약이 따름-->

  • 배열은 초기 생성 시에 그 크기를 미리 지정해야함 -> 초기에 지정한 크기는 바꿀 수 없기 떄문에 생성한 크기보다 많은 자료를 저장할 수 없어 효율적인 자료구조로 사용하는데 제약이 따름
  • 데이터의 삽입, 검색, 삭제 등의 기능을 매번 직접 작성하여 개발할 경우, 중복되는 로직들이 발생함 -> 배열에 데이터를 삽입, 검색, 삭제 등의 기능을 클래스로 구현하면 재사용성을 높일 수 있음

컬렉션 프레임워크 개념

프로그램에서 사용할 데이터들을 효과적으로 관리하고 사용할 수 있도록 다양한 기능의 클래스를 제공

  • Vector, Stack, Properties 각각의 사용법이 다름 상호 호환성이 떨어짐 확장성이 떨어짐 -> 컬렉션 프레임워크 높은 성능으로 동작 상호 운용성이 뛰어남 응용 및 확장성이 뛰어남 표준 인터페이스들의 집합에 기초를 두고 구현되었기 때문에 가능

컬렉션 관련 인터페이스

컬렉션은 몇 개의 표준 인터페이스를 구현하는 클래스들로 구성됨

  • Collection : 객체들의 집합을 사용할 수 있도록 하는 컬렉션 계층의 최상위 인터페이스
  • List : Collection 인터페이스를 상속했으며, 순차적인 리스트를 다루기 위하여 사용함
  • Set : Collection 인터페이스를 상속했으며, 유일한 요소만 포함하는 집합을 다루기 위하여 사용함
  • SortedSet : Set인터페이스를 상속했으며, 정렬된 집합을 다루기 위하여 사용함

Collection 인터페이스

Collection 인터페이스는 컬렉션 프레임워크의 토대가 되는 인터페이스로 모든 컬렉션 클래스가 가지고 있는 핵심 메서드로 구성되어 있음

  • *boolean add(Object obj) : 컬렉션에 obj를 추가함. 성공 시 true를 반환하고 obj가 이미 컬렉션의 멤버이고 중복을 허용하지 않는 컬렉션일 경우 추가되지 않고 false를 반환함
  • boolean addAll(Collection c) : 컬렉션에 c의 모든 요소를 추가함.요소의 추가가 하나라도 성공했을 경우 true를 반환함
  • void clear() : 컬렉션의 모든 요소를 제거함
  • *boolean contains(Object obj) : obj가 컬렉션의 요소이면 true를 반환함
  • boolean containsAll(Collection c) : c의 모든 요소가 컬렉션의 멤버이면 true를 반환함
  • boolean equals(Object obj) : 컬렉션과 obj가 동일한 객체이면 true를 반환함
  • int hashCode() : 컬렉션의 Hash코드를 반환함
  • *boolean isEmpty() : 컬렉션이 비어있을 경우 true를 반환함
  • *Iterator iterator() : 컬렉션의 모든 요소를 순차적으로 접근할 수 있는 Iterator를 반환함
  • *boolean remove(Object obj) : 컬렉샨에서 obj를 하나 제거함. 성공 시 true를 반환함
  • boolean removeAll(Collection c) : c에 있는 요소를 제외한 모든 요소를 컬렉션에서 제거함. 요소의 제거가 하나라도 성공하면 true를 반환함
  • boolean retainAll(Collection c) : c에 있는 요소를 제외한 모든 요소를 컬렉션에서 제거함. 요소의 제거가 하나라도 성공하면 true를 반환함
  • *int size() : 컬렉션의 요소의 수를 반환함
  • Object[] toArray() : 컬렉션의 모든 요소를 복사한 배열을 반환함
  • Object[] toArray(Object array[]) : array와 일치하는 타입을 가지는 요소만을 복사한 배열을 반환함

List 인터페이스

Collection 인터페이스를 확장했으며 요소들의 순서를 저장하는 기능이 추가됨 0부터 시작하는 index를 사용하여 특정 위치레 요소를 삽입하거나, 특정 위치의 요소를 꺼낼 수 있음 동일한 요소라고 하더라도 순서를 가지고 구분이 가능하기 때문에 요소의 중복저장을 허용함

  • *void add(int index, Object obj) : 리스트의 index위치에 obj를 삽입함
  • boolean addAll(int index, Collection c) : 리스트의 index위치에 c의 모든 요소를 삽입함. 하나라도 삽입되었을 경우 true를 반환함
  • *Object get(int index) : 리스트의 index위치의 요소를 반환함
  • int indexOf(Object obj) : 리스트에서 처음으로 검색된 obj의 위치를 반환함. obj가 리스트의 요소가 아니라면 -1을 반환함
  • int lastIndexOf(Object obj) : 리스트에서 마지막으로 검색된 obj의 위치를 반환함.obj가 리스트의 요소가 아니라면 -1을 반환함
  • ListIterator listIterator() : 리스트의 모든 요소를 양방향으로 순차적으로 접근하고 변경할 수 있는 ListIterator를 반환함
  • ListIterator listIterator(int index) : 리스트의 index이후 모든 요소를 양방향으로 순차적으로 접근하고 변경할 수 있는 ListIterator를 반환함
  • *Object remove(int index) : 리스트의 index위치의 요소를 삭제하고 삭제한 요소를 반환함
  • Obejct set(int index, Object obj) : 리스트의 index위치의 요소를 obj로 변경하고 변경되기 이전의 요소를 반환함
  • List subList(int start, int end) : 리스트의 start에서 end-1위치까지의 요소를 리스트로 반환함. 원본 리스트와 반환된 리스트는 데이터를 공유함

Set 인터페이스

Collection 인터페이스를 확장했으며 중복되지 않는 요소들의 집합을 선언함 동일한 요소의 중복을 허용하지 않기 때문에 이미 저장된 객체를 add() 메서드로 다시 저장하려고 할 때 false를 반환함 추가적인 메서드는 선언되어 있지 않음

SortedSet 인터페이스

Set 인터페이스를 확장했으며 오름차순으로 정렬된 집합의 동작을 선언함

  • Comparator comparator() : 정렬 방식을 정의한 비교자(comparator)를 반환함. 만약 비교자를 따로 정의하지 않고 기본 방식을 사용한다면 null이 반환됨
  • *Object first() : 첫번째 요소를 반환함
  • SortedSet headSet(Object end) : 첫 번쨰 요소부터 end 요소까지 포함하는 SortedSet을 반환함. 원본과 반환된 SortedSet은 데이터를 공유함
  • *Object last() : 마지막 요소를 반환함
  • SortedSet subSet(Object start, Object end) : start에서 end-1까지의 요소를 포함하는 SortedSet을 반환함. 원본과 반환된 SortedSet은 데이터를 공유함
  • SortedSet tailSet(Object start) : start에서 마지막 요소까지 포함하는 SortedSet을 반환함. 원본과 반환된 SortedSet은 데이터를 공유함.

컬렉션 클래스

구현한 인터페이스의 특징을 그대로 가지고 있음 몇몇 클래스들은 추상 클래스로 작성되어 실제 동작이 가능한 자식 클래스의 골격을 제공함

  • AbstractCollection : Collection 인터페이스 대부분의 기능을 실제 구현함
  • AbstractList : AbstractCollection을 확장하고 List 인터페이스 대부분의 기능을 실제 구현함
  • AbstractSequentialList : AbstractList를 확장하여 요소들의 순차적인 접근을 처리함
  • *LinkedList : AbstractSequentialList를 확장함으로써 연결 리스트를 구현함
  • *ArrayList : AbstractList를 확장하며 동적 배열을 구현함
  • AbstractSet : AbstractCollection을 확장하고 Set 인터페이스 대부분의 기능을 실제 구현함
  • *HashSet : AbstractSet을 확장하여 Hash Table을 사용하도록 구현함
  • LinkedHashSet : HashSet을 확장하며 삽입 순서가 유지되는 집합을 구현함
  • *TreeSet : AbstractSet을 확장하며 트리에 저장된 집합을 구현함

ArrayList 클래스

AbstractList를 확장하고, List 인터페이스를 구현함 내부적으로 배열을 이용하여 리스트 자료구조를 구현함 동적 배열을 지원하기 때문에 초기 값을 넘어서는 객체를 삽입하는 경우 그 크리가 늘어나고, 반대로 객체를 제거하는 경우 그 크기가 줄어듦

  • 생성자 ArrayList() : 비어있는 ArrayList를 생성함. 초기 배열의 크기는 10 ArrayList(Collection c) : 컬렉션 c의 요소들로 초기화되는 ArrayList를 생성함 ArrayList(int capacity) : capacity 만큼의 초기 배열의 크기를 가지는 ArrayList를 생성함

AbsractList 클래스와 List 인터페이스의 모든 메서드를 사용할 수 있으며, 다음 메서드가 추가되었음

  • 생성자 void ensureCapacity(int minCapacity) : ArrayList의 사이즈를 지정함 void trimToSize() : ArrayList의 빈 공간을 제거하여 사이즈를 조절함

LinkedList 클래스

AbstractSequentialList를 확장하고 List 인터페이스를 구현함 -> 이중 연결 리스트(Doubly Linked List) 형태의 자료구조를 구현함

  • 생성자 LinkedList() : 비어있는 LinkedList를 생성함 LinkedList(Collection c) : 컬렉션 c의 요소들로 초기화되는 LinkedList를 생성함

AbstractSequentialList클래스와 List 인터페이스의 모든 메서드를 사용함 첫 요소나 마지막 요소에 삽입/삭제가 효율적으로 이루어지므로 이에 대한 추가적인 메소드를 제공함

  • *void addFirst(Object obj) : 리스트의 맨 앞에 obj를 추가함
  • *void addLast(Object obj) : 리스트의 맨 뒤에 obj를 추가함
  • *Object getFirst() : 리스트의 첫 번째 요소를 반환함
  • *Object getLast() : 리스트의 마지막 요소를 반환함
  • *Object removeFirst() : 리스트의 첫 번째 요소를 삭제한 후 요소를 반환함
  • *Object removeLasr() : 리스트의 마지막 요소를 삭제한 후 요소를 반환함

HashSet 클래스

AbstractSet을 확장하고 Set 인터페이스를 구현함 데이터 저장소로 Hash Table을 사용하기 때문에 Hash 형태의 자료구조를 구현함 객체의 저장이나 삭제 시 내부적으로 대상 객체를 hashing하여 HashCode를 만든 뒤 Hash Table의 index로 사용함 객체를 hashing 하는 작업은 자동으로 수행되기 때문에 Hash Table을 직접 접근할 수 없음 삽입, 삭제 등의 작업이 데이터의 수와 관계없이 일정한 성능을 보장함

  • 생성자 HashSet() : 비어있는 HashSet을 생성함. 초기 Hash Table의 크기는 16 HashSet(Collection c) : 컬렉션 c의 요소들로 초기화되는 Hash셋을 생성함 HashSet(int capacity) : capacity 만큼의 초기 Hash Table의 크기를 가지는 HashSet을 생성함 HashSet(int capacity, float fillRatio) : capacity만큼의 초기 Hash Table의 크기를 사지는 HashSet을 생성함. fillRatio는 Hash Table에 데이터가 얼마나 채워졌을 때 크기를 확장할지 여부를 지정할 때 사용함. 0.0~1.0사이의 값을 사용할 수 있으며 만약 0.5 일 경우 전체 크기의 50%가 요소로 채워졌을 때 Hash Table을 확장한다는 의미임. 기본값은 0.75

AbstractSet 클래스와 Set 인터페이스의 모든 메서드를 사용할 수 있으며, 추가적인 메서드는 정의하지 않음

  • Set : 중복을 허용하지 않기 때문에 동일한 객체를 여러 번 저장할 수 없음. 순서를 보장하지 않기 때문에 저장한 순서로 출력되지 않음

LinkedHashSet 클래스

HashSet을 확장하고 Set 인터페이스를 구현함

  • HashSet : 삽인된 순순서를 기억하지 않음
  • LinkedHashSet : 연결 리스트를 이용하여 삽입된 데이터의 순서를 기억함

생성자는 HashSet과 동일하며 추가적인 메서드는 정의되지 않음

저장된 순서대로 데이터가 출력되며, 중간에 데이터를 삭제해도 데이터의 순서가 유지됨

TreeSet 클래스

AbstractSet을 확장하며 SortedSet 인터페이스를 구현함 ->오름차순으로 정렬된 Set 집합을 사용할 수 있음 기억장소로 트리를 사용하여 빠른 접근 속도를 가지므로, 많은 양의 데이터를 정렬하여 사용할 때 유용함

  • 생성자 TreeSet() : 자연적인 정렬 순서를 따르는 비어있는 트리셋을 생성함 TreeSet(Collection c) : 자연적인 정렬 순서를 따르며 컬렉션 c의 요소들로 초기화되는 트리셋을 생성함 TreeSet(Comparator comp) : 정렬방식을 정의한 비교자(comparator)에 따라 정렬되는 비어있는 트리셋을 생성함 TreeSet(SortedSet ss) : ss요소들로 초기화되는 트리셋을 생성함

Iterator 인터페이스

컬렉션 클래스의 모든 요소를 처음부터 끝까지 순차적으로 접근 가능하도록 해주는 인터페이스

ex) 회원 목록을 List에 저장하고 저장한 모든 목록을 순서대로 출력함 결제할 보고서를 저장한 후 출력함 -> Iterator는 간단하고 통일된 방법으로 처리할 수 있는 방법을 제공함

직접 객체를 생성할 수 없고, 컬렉션 클래스의 iterator() 메서드를 통하여 객체를 얻을 수 있음

  • *boolean hasNext() : iterator에 요소가 더 있으면 true를 반환함
  • *Object next() : 다음 요소를 반환함
  • *void remove() : 컬렉션에서 현재 요소를 삭제함

Mao 컬렉션

Map 컬렉션 개요

  • Map key, value의 쌍으로 데이터를 저장하는 객체. key는 유일해야 하며 value는 중복이 가능함 기능적으로 Collection 인터페이스와 다르기 때문에 Collection 인터페이스를 상속받지 않음

  • 인터페이스 Map : Map 계열의 최상위 인터페이스로 유일한 키(key)와 값(value)을 연결(map)하는 다양한 메서드를 선언함 Map.Entry : Map에 저장되는 요소(key/value)를 표현하며 Map 인터페이스의 내부 클래스임 SortedMap : Map 인터페이스를 확장하여 key를 오름차순으로 유지함

  • 클래스 AbstractMap : Map 인터페이스의 대부분을 구현함 *HashMap : AbstractMap을 확장하고 Hash Table을 이용하여 데이터를 관리하는 클래스임 TreeMap : AbstractMap을 확장하고 트리를 이용하여 데이터를 관리하는 클래스임 WeakHashMap : AbstractMap을 확장하고 취약 키(weak key)를 갖는 Hash Table을 이용하여 데이터를 관리하는 클래스임 *LinkedHashMap : HashMap을 확장하며 삽입 순서가 유지되는 집합을 구현함 IdentityHashMap : AbstractMap을 확장하고 요소를 비교할때 참조를 근거로 비교함

Map 인터페이스

*void clear() : 맵의 모든 요소를 삭제함 boolean containsKey(Object k) : 맵의 key값으로 k가 있으면 true를 반환함 boolean containsValue(Object v) : 맵의 value값으로 v가 있으면 ture를 반환함 Set entrySet() : 맴에 있는 모든 엔트리를 포함하는 Set을 반환함 boolean equals(Object obj) : obj가 Map이면서 동일한 엔트리를 포함하고 있다면 true를 반환함 *Object get(Object k) : 키값 k와 연결된 value를 반환함 int hashCode() : 맵의 HashCode를 반환함 *boolean isEmpty() : 맵이 비어있으면 true를 반환함 *Set keySet() : 맵에 있는 모든 key를 포함하는 Set을 반환함 *Object put(Object k, Object v) : 지정한 k-value쌍의 요소를 맵에 추가함 만약 k값의 key가 이미 있다면 덮어씀 void putAll(Map m) : m에 있는 모든 요소를 추가함 *Object remove(Object k) : 키값 k와 연결된 value를 삭제함 *int size() : 맵에 저장된 요소의 수를 반환함 *Collection values() : 맵에 있는 모든 value를 포함하는 Set을 반환함

HashMap 클래스

키와 데이터값의 한쌍으로 묶어서 관리하며 키의 중복을 허용하지 않음 ->HashMap, HashTable, TreeMap 클래스가 유사함 Enumeration이나 Iterator 객체를 사용하여 데이터를 추출하지 않고 특정 키로 등록된 데이터를 추출함

  • HashMap메서드 *put() : 키(key)와 값으로 구성된 새로운 데이터를 추가함 *get() : 지정한 키(key)에 해당하는 데이터를 반환함 *remove() : 지정한 키(key)에 해당하는 데이터를 삭제함 *containsKey() : 지정한 키(key)가 존재하는지 여부를 반환함 *containsValue() : 지정한 값이 존재하는지 여부를 반환함 *size() : Map의 요소 개수를 반환함 *isEmpty() : Map이 비어 있는지의 여부를 반환함