Collection Framework

김민혁·2022년 1월 25일
0
  • java.util 패키지
    • 다수의 데이터를 쉽게 처리하는 방법 제공 -> DB처럼 CRUD 기능 중요
  • collection framework 핵심 interface
    • Iterable->Collection->List, Set
    • Map은 Collection을 상속하진 않음
    • List
      • 순서가 있는 데이터의 집합
      • 순서가 있으므로 데이터의 중복을 허락
      • ex: ArrayList, LinkedList
    • Set
      • 순서를 유지하지 않는 데이터의 집합
      • 순서가 없으므로 같은 데이터를 구별할 수 없음 - > 중복 허락하지 않음
      • ex: HashSet, TreeSet...
    • Map
      • key와 value의 쌍으로 데이터를 관리하는 집합, 순서는 없고 key의 중복 불가, value는 중복 가능(ex: 속성-값, 지역번호-지역)
      • ex: HashMap, TreeMap
  • Collection method
    • 추가
      • add(E e)
      • addAll(Collection<? extends E> c)
    • 조회
      • contains(Object o)
      • containsAll(Collection<?> c)
      • equals()
      • isEmpty()
      • iterator()
      • size()
    • 삭제
      • clear()
      • removeAll(Collection<?> c)
      • retainAll(Collection<?> c)
    • 수정
    • 기타
      • toArray()

List

특징

  • 순서가 있는 데이터의 집합
  • 순서가 있으므로 데이터의 중복을 허락

ArrayList

  • 내부적으로 Object 배열을 만들고 꽉 찰 경우 grow() 메서드를 통해 더 크게 재할당함
  • default는 크기가 0인 배열부터 시작함
  • List method
    • 추가
      • add(int index, E element)
      • addAll(int index,Collection\<? extends E> c)
    • 조회
      • get(int index)
      • indexOf(Object o)
      • lastaIndexOf(Object o)
      • listIterator()
    • 삭제
      • remove(int index)
    • 수정
      • set(int index, E element)
    • 기타
      • subList(int fromIndex, int toIndex)

LinkedList

  • 각 요소를 Node로 정의하고 Node는 다음 요소의 참조 값과 데이터로 구성됨
    • 각 요소가 다음 요소의 링크 정보를 가지며 연속적으로 구성될 필요가 없다.
  • 순차적으로 추가/수정/삭제할 때와 조회할 때는 ArrayList가 빠르다
  • 비순차적으로 추가/수정/삭제할 때는 LinkedList가 빠르다.

결론

  • 특정 클래스가 좋고 나쁨이 아니라 용도에 적합하게 사용해야 한다.
  • 소량의 데이터를 가지고 사용할 경우는 큰 차이가 없다.
  • 정적인 데이터 활용, 단순한 데이터 조회용: ArrayList
  • 동적인 데이터 추가, 삭제가 많은 작업: LinkedList

ArrayList 나 LinkedList 생성시 List 인터페이스를 참조변수로 사용하는 이유

  • ArrayList에서 LinkedList로, 또는 그 반대로 변경이 용이하기 때문이다.

자료 삭제 시 주의 사항

  • List 인터페이스는 기본적으로 삭제 후 인덱스를 당겨오므로 이를 주의(뒤에서 삭제하는 방식으로 하면 이 문제는 해결된다.)

Set

특징

  • 순서 없이 주머니에 구슬(데이터)를 넣는 형태
  • 순서가 없으므로 데이터를 구별할 index가 없어 중복이 허용되지 않는다.
    • 효율적인 중복 데이터 제거 수단
  • Set이 같다고 판단하는 기준
    • equals()가 true 반환
    • hashCode() 값이 같음
  • equals() 재정의 시 hashCode()도 재정의하는것이 좋다

Map

특징

  • Key와 Value를 하나의 Entry로 묶어서 데이터 관리
    • Key: Object 형태로 데이터 중복을 허락하지 않음
    • Value: Object 형태로 데이터 중복이 허락 됨
  • Collection을 상속하지 않으므로 메소드 목록이 다름
  • Map에서 Entry를 얻고나서 key 나 value에 바로 접근할 수 있다.

정렬

  • 요소를 특정 기준에 대한 내림차순 또는 오름차순으로 배치하는 것
  • 순서를 가지는 Collection들만 정렬 가능
    • List 계열
    • Set에서는 SortedSet의 자식 개체
    • Map에서는 SortedMap의 자식 객체(key 기준)
  • Collections의 sort()를 이용한 정렬
    • sort(List list)
      • 객체가 Comparable을 구현하고 있는 경우 내장 알고리즘을 통해 정렬

Comparator의 활용

  • 객체가 Comparable을 구현하고 있지 않거나 사용자 정의 알고리즘으로 정렬하려는 경우
  • 1회성 객체 사용 시 anonymous inner class 사용
profile
학생

0개의 댓글