Coding/Java

Java Collection Framework

heyoon2j 2020. 10. 8. 23:59

■ Java Collection Framework

* java.utils에 속한 일련의 클래스로, 자료구조를 담당

* 잘 짜인 인터페이스를 기반으로 다양한 자료구조를 구현

* 제네릭 클래스로 되어있어, 다양한 객체를 요소로 담을 수 있다.

 

• JCF 인터페이스

1. List 인터페이스

* Collection 인터페이스를 상속

* 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용

* 데이터의 순서(index)가 유일한 데이터의 구분자(identifier)로 사용

  - Ex> [1, 3, 2, 5, 6, 2, 1] : 같은 값이 있으나, index가 다름


2. Set 인터페이스

* Collection Interface 상속

* 순서가 없는 데이터 {집합}을 다루는 인터페이스

* 중복되는 데이터를 효율적으로 제거하는 데 사용 가능

* 중복을 검사하는 수단으로 hashCode(), equals()

  - hash를 빠르게 계산해서 hash만 비교

  - 그 다음에 판정이 나지  않으면, equasl()로 추가 비교


3. Map 인터페이스

* Collection Interface 상속하지 않는다.

* Key, Value 쌍으로 구성된 자료의 집합을 다루는 인터페이스

  - Map.Entry<K, V> 형태로 저장

* Key는 중복될 수 없으며, Value는 중복이 가능

  - Key가 identifier 역할을 한다.


• Collection 인터페이스

Collection 인터페이스 주요 메서드

메서드 설 명
boolean add(E e) 요소 e를 컬렉션에 추가한다.
boolean addAll(Collection<? extends E> c) 다른 컬렉션 c의 모든 요소를 컬렉션에 추가한다.
void clear() 컬렉션의 모든 요소를 제거한다.
boolean contains(Object o) 컬렉션에 요소 o가 존재하는 확인한다.
boolean containsAll(Collection<?> c) 컬렉션 c의 모든 요소가 컬렉션에 포함되는지 확인한다.
boolean isEmpty() 컬렉션이 비어있는지 확인한다.
Iterator iterator() 컬렉션의 Iterator를 반환한다.
boolean remove(Object o) 컬렉션에서 요소 o를 제거한다.
boolean removeAll(Collection<?> c) 컬렉션 c에 속한 모든 요소를 컬렉션에서 제거한다.
boolean retainAll(Collection<?> c) 컬렉션 c에 포함된 객체만 남기고 나머지 요소를 제거한다.
int size() 컬렉션에 속한 요소의 개수를 반환한다.
T[] toArray() 컬렉션의 요소들을 T[] 배열로 반환한다.

 

Iterator

* iterator()로 반환되는 객체로, Collection에 저장된 요소에 접근하기 위해 사용

메서드 설 명
boolean hasNext() 다음 요소가 있는지 확인
E next() 다음 요소가 있을 경우 반환
void remove() 현재 위치의 요소를 삭제

 

* Iterator 활용

Iterator<String> iter = collection.iterator();
while (iter.hasNext()) {
  String string = iter.next();
  System.out.println(string);
}

for (String string: collection) {
  System.out.println(string);
}

• List 인터페이스

List 인터페이스 주요 메서드

메서드 설 명
void add(int index, E element) index 위치에 요소 element를 삽입한다.
boolean addAll(int index, Collection<? extends E> c) index 위치부터 컬렉션 c의 모든 요소를 추가한다.
E get(int index) index 위치에 저장된 요소를 반환한다.
int indexOf(Object o) 객체 o가 저장된 첫번째 인덱스를 반환한다. 없을 경우 -1을 반환한다.
int lastIndexOf(Object o) 객체 o가 저장된 마지막 인덱스를 반환한다. 없을 경우 -1을 반환한다.
ListIterator listIterator() ListIterator 객체를 반환한다.
E remove(int index) index에 위치한 객체를 제거하고, 반환한다.
E set(int index, E element) index에 위치한 요소를 element로 대체한다.
List subList(int fromIndex, int toIndex) fromIndex에 위치한 요소부터 toIndex의 직전에 위치한 요소까지 포함한 List를 반환한다.

List 인터페이스의 구현체

* List Collection

List<String> stringList = new ArrayList<>();    // 가장 많이 쓰이는, 배열 기반의 리스트
List<String> stringList1 = new LinkedList<>();  // 노드의 연결로 구성된 리스트
List<String> stringList2 = new Vector<>();      // 멀티스레드 환경에서 안전하게 동작하나... 너무 느리다!!!
List<String> stringList3 = new Stack<>();       // Vector를 더 제한한 방법, Stack 자료구조 구현

 

* ArrayList

  - 제네릭 클래스로 구현된 자료구조

  - 배열을 기반으로 구현된 클래스로, 가장 자주 활용되며 활용도가 높다.

  - ArrayList의 생성자는 세 종류가 주어진다.

public ArrayList()
public Arraylist(int initialCapacity)
public ArrayList(Collection<? extends E>)

 

* LinkedList

  - 제네릭 클래스로 구현된 자료구조

  -  연결리스트를 기반으로 구현된 클래스로, 배열의 단점을 극복하기 위한 구현체

  - ArrayList vs LinkedList

구현체 순차 추가/수정/삭제 비순차 추가/수정/삭제 조 회
ArrayList 빠름 느림 빠름
LinkedList 느림 빠름 느림

List 정렬

* Collections 클래스의 sort() 메서드 사용

* public static <T extends Comparable<? super T> void sort(List<T> list)

  - 객체에 선언된 public int compareTo(T t) 메소드로 비교하여 정렬

* public static <T> void sort(List<T> list, Comparator<? super T> c)

  - Comparator 객체 c에 정의된 public int compare(T o1, T o2) 메소드로 비교하여 정렬


ListIterator

* listIterator()로 반환되는 객체로, 양방향 사용이 가능

* Iterator를 상속받은 클래스

메서드 설 명
boolean hsaPrevious() 이전 요소가 있는지 확인
E previous() 이전 요소가 있을 경우 반환

• Set 인터페이스

Set의 구현체

* HashSet

  - Set의 대표적인 구현체로, 기본적인 기능이 구현되어 있다.

 

* TreeSet

  - NaviableSet 인터페이스를 구현하며,  이진 탐색 트리 자료구조이다.

  - 객체를 삽입하는 동시에 정렬되는 특성상, 비교가 가능해야 한다.

  - TreeSet 메서드

메서드 설 명
public E first() 정렬된 첫 요소를 반환
public E last() 정렬된 마지막 요소를 반환
public E lower(E e) e 객체의 바로 이전 객체를 반환
public E higher(E e) e 객체의 바로 다음 객체를 반환
public E floor(E e) e 또는 e 보다 이전 객체를 반환
public E ceiling(E e) e 또는 e 보다 이후 객체를 반환
public E pollFirst() 정렬된 첫 요소를 제거하고 반환
public E pollLast() 정렬된 마지막 요소를 제거하고 반환
public NavigableSet descendingSet() 내림차순으로 정렬하는 객체를 반환
public NavigableSet headSet(E toElement, boolean inclusive) toElement 이전 요소로 구성된 객체 반환
public NavigableSet tailSet(E fromElement, boolean inclusive) fromElement 이후 요소로 구성된 객체 반환
public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) fromElement 이후, toElement 이전 요소로 구성된 객체 반환

• Map 인터페이스

Map<K, V>의 구현체

* HashMap<K, V> : 가장 많이 사용되는 Map의 구현체

* TreeMap<K, V> : 정렬 기준이 더해진 NavigableMap을 구현한 구현체

* Hashtable<K, V> : HashMap과 유사하지만 성능이 떨어지는 대신 멀티스레드에 안전한 구현체

* Properties : 속성 파일을 손쉽게 관리하는, Hashtable<K, V>의 하위 클래스 구현체


Map<K, V>의 주요 메서드

메서드 설 명
void clear() Map의 모든 요소를 삭제
boolean containsKey(Object key) key가 존재하는지 여부를 반환
boolean containsValue(Object value) value가 존재하는지 여부를 반환
Set<Map.Entry<K,V>> entrySet() Map의 Entry 요소를 Set에 담아 반환
V get(Object key) key에 해당하는 value 객체 반환
Set keySet() key 요소를 Set 형태로 반환
V put(K key, V value) key와 value 쌍으로 구성된 Entry 추가. 기존에 등록된 key라면 해당 value를, 없으면 null을 반환
void putAll(Map<? extends K, ? extends V> m) m에 속한 모든 Entry를 추가
V remove(Object key) key에 해당하는 Entry를 제거하고 반환. 등록되지 않은 key라면 null 반환
Collection values value 객체들을 Collection에 담아 반환
Collection values value 객체들을 Collection에 담아 반환
int size() Map에 포함된 Entry 객체의 수 반환
boolean isEmpty() Map에 데이터가 없는지 여부 반환

TreeMap<K, V>의 주요 메서드

메서드 설 명
public Map.Entry<K, V> firstEntry() 정렬된 첫 Entry 반환
public Map.Entry<K, V> lastEntry() 정렬된 마지막 Entry 반환
public Map.Entry<K, V> lowerEntry(K key) key 바로 이전 Entry 반환
public Map.Entry<K, V> higherEntry(K key) key 바로 다음 Entry 반환
public Map.Entry<K, V> floorEntry(K key) key 또는 key 보다 이전 Entry 반환
public Map.Entry<K, V> ceilingEntry(K key) key 또는 key 보다 이후 Entry 반환
public Map.Entry<K, V> pollFirstEntry() 정렬된 첫 Entry를 제거하고 반환
public Map.Entry<K, V> pollLastEntry() 정렬된 마지막 Entry를 제거하고 반환
public NavigableSet descendingKeySet() 내림차순으로 정렬하는 Set 반환
public NavigableSet descendingKeyMap() 내림차순으로 정렬하는 Map 반환
public NavigableMap<K, V> headMap(K toKey, boolean inclusive) toKey 이전 Entry로 구성된 객체 반환
public NavigableMap<K, V> tailMap(K fromKey, boolean inclusive) fromKey 이후 Entry로 구성된 객체 반환
public NavigableMap<K, V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) fromKey 이후, toKey 이전 Entry로 구성된 객체 반환

Properties의 주요 메서드

메서드 설 명
getProperty() key에 해당하는 속성 값을 반환
stringPropertyNames() key의 목록을 Set으로 반환
setProperty() key로 value를 등록하고 기존 value 값을 반환
load() reader를 이용해 속성을 읽어온다. (.properties)
loadFromXML() XML 형식으로 저장된 속성을 읽어온다.
store() writer를 이용해 속성을 저장한다.
storeToXML() XML 형식으로 속성 파일을 저장한다.

 

 

 

 

 

 

 

'Coding > Java' 카테고리의 다른 글

Java Wrapper Class  (0) 2020.10.12
Java I/O Stream  (0) 2020.10.08
Java 코드 작성 습관  (0) 2020.10.08
Java Code Convention(Google Java Style 정리)  (0) 2020.10.07
java.lang 패키지  (0) 2020.09.29