본문 바로가기
프로그래밍/Java

Java - Collections (1)

by 왕거 2020. 10. 9.

최근들어서 블로깅에 너무 소홀했다.

 

다시 멘탈 잡고 진행하자.

 

이번 강의의 주제인 컬렉션 프레임워크는 자료구조를 사용하기위한 일종의 라이브러리로 이해하였다.

 

대략적으로 List, Set, Queue 그리고 Map로 구성되어 있고, 각 자료구조를 구현하는 각각의 방법들에 대한 내용이었다.

 

 

Java Collection 구조

List<E> Interface

  • List 인터페이스를 구현하는 컬렉션 클래스
    • ArrayList<E>  :  배열기반의 Array를 통해서 List 인터페이스를 구현, 배열을 사용해서 인스턴스를 저장
    • LinkedList<E>  :  연결리스트를 통해서 List 인터페이스를 구현, 연결리스트를 사용해서 인스턴스를 저장
  • List<E> 인터페이스의 기본 특성
    • 인스턴스의 저장 순서가 유지된다.
    • 동일 인스턴스의 중복 저장이 허용된다.
  • List 인터페이스의 경우는 파이썬의 리스트와 같은 개념으로 이해하면 좋을 것 같다.
  • List 인터페이스를 구현하는 컬렉션 클래스들의 장단점
    • ArrayList  :  구성하는 각 인스턴스 참조 속도가 빠르고 편하지만 저장된 인스턴스 삭제에 시간이 매우 많이 소요될 수 있다.
    • LinkedList  :  저장된 인스턴스 삭제가 간단하지만 인스턴스 참조 속도가 매우 많이 소요될 수 있다.
    • 두 경우가 완전히 정 반대의 장단점을 가지기 때문에 상황에 맞게 선택해서 사용해야 함

 

Set<E> Interface

  • Set 인터페이스를 구현하는 컬렉션 클래스
    • HashSet<E>  :  해시 알고리즘을 사용해서 Set 인터페이스를 구현
    • TreeSet<E>  :  트리 자료구조를 기반으로 Set 인터페이스를 구현, 트리 자료구조의 특성으로 인한 정렬이 가능하다.
      • Comparable 인터페이스 또는 Comparator 인터페이스를 구현한 인스턴스로 정렬 기준으로 정할 수 있다.
  • Set<E> 인터페이스의 기본 특성
    • 중복을 허용하지 않는다.
    • 순서를 다룰 수 없다.
    • 즉, 집합의 특성을 지닌다.
  • Set 인터페이스는 파이썬의 세트와 같은 개념으로 이해하면 좋을 것 같다.
  • Hash를 사용한다.
    • Object 클래스의 equals 메소드 및 hashCode 메소드를 통해서 동일한 인스턴스인지 확인
    • hashCode 메소드를 오버라이딩해서 자신만의 해시 알고리즘을 적용하여 사용할 수 있다.

 

Queue and Stack Interface

  • Queue<E> Interface
    • FIFO 특성을 지닌 큐 자료구조를 구현하는 인터페이스
    • LinkedList를 사용해도 Queue<E> 인터페이스를 구현할 수 있다.
    • 인터페이스 메소드들
      • boolean add(E e)  :  Queue에 넣기
      • E remove()  :  Queue에서 꺼내기
      • E element()  :  확인하기
      • boolean offer(E e)  :  Queue에 넣기, 공간이 부족하면 False 반환
      • E poll()  :  Queue에서 꺼내기, 꺼낼 대상이 없으면 Null 반환
      • E peek()  :  확인하기, 대상이 없으면 Null 반환
  • Deque<E> Interface
    • LIFO 특성을 지닌 스택 자료구조를 구현하는 인터페이스
    • 자바에서 스택은 Deque을 기준으로 구현하는 것이 원칙
    • 인터페이스 메소드들
      • boolean offerFirst(E e)  :  앞으로 넣기, 공간이 부족하면 False 반환
      • E pollFirst()  :  앞에서 꺼내기, 꺼낼 대상이 없으면 Null 반환
      • E peekFisrt()  :  앞에서 확인하기, 대상이 없으면 Null 반환
      • boolean offerLast(E e)  :  뒤에서 넣기, 공간이 부족하면 False 반환
      • E pollLast()  :  뒤에서 꺼내기, 대상이 없다면 Null 반환
      • E peekLast()  :  뒤에서 확인하기, 대상이 없으면 Null 반환

 

Map<K, V> Interface

  • Map<K, V> Interface 를 구현하는 컬렉션 클래스
    • HashMap<K, V>  :  Hash를 사용해서 Hash 결과 값을 활용해서 Map 인터페이스를 구현
    • TreeMap<K, V>  :  트리 자료구조를 기반으로 Map 인터페이스를 구현한다. 기본적으로 Key값 기준 오름차순으로 정렬된다.
  • Map<K, V> 인터페이스의 기본 특성
    • Key - Value의 형태로 데이터를 저장한다.
    • Iterable 인터페이스를 상속하지 않아서 해당 기능을 사용할 수 없다.
  • 파이썬의 Dictionary 자료형이나 JSON포맷과 유사한 형태

 

Java의 반복자 - Iterator (Iterable 인터페이스)

  • 파이썬의 반복자와 동일하다.
  • 반복자의 메소드
    • next()  :  다음 인스턴스의 참조값 반환
    • hasNext()  :  next() 호출 시 참조값 반환이 가능한지 여부를 True/False로 반환
    • remove()  :  next() 호출 시 반환될 인스턴스를 삭제
  • 반복자는 선언 후 할당된 후에도 참조중이지 않다. 기본적으로는 next() 메소를 호출해야 참조
  • 리스트 기반의 컬렉션 클래스는 양방향 반복자를 사용할 수 있다. ListIterator라고 부른다.
    • previous()  :  이전 인스턴스의 참조값 반환
    • hasPrevious()  :  previous() 호출 시 참조값 반환이 가능하지 여부를 True/False로 반환

 

'프로그래밍 > Java' 카테고리의 다른 글

Java - 열거형과 가변인자, 어노테이션  (0) 2020.10.14
Java - Collection (2)  (0) 2020.10.09
Java - 제네릭 (2)  (0) 2020.09.27
Java - 제네릭 (1)  (0) 2020.09.22
Java - Java의 기본 클래스 (2)  (0) 2020.09.21