자바

자바 - 컬렉션 자료구조

록's 2023. 1. 25. 18:43
728x90
반응형

Set :  데이터의 집합이며, 순서가 없고 중복된 데이터를 허용하지 않는다.
중복되지 않는 데이터를 구할떄 유용하며, 빠른 검색 속도를 가진다.
인덱스가 따로 존재하지 않기 때문에 Iterator를 사용한다.
Map : Key와 Value의 한쌍으로 이루어진 데이터의 집합, Key에 대한 중복이 없으면 순서를 보장하지 않는다.
뛰어난 검색 속도를 가진다.
인덱스가 따로 존재하지 않기 때문에 Iterator를 사용한다.

List 종류
- LinkedList
 . 양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
 . ArrayList 보다 검색이 느리다.

- ArrayList
 . 단방향 포인터 구조로 데이터 순차적 접근에 강점을 가진다.
 . 배열을 기반으로 데이터를 저장한다.
 . 데이터 삽입, 삭제가 느리다.
 . 데이터 검색이 빠르다.

Set 종류
- HashSet
 . 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다.
 . NULL 값을 허용한다.
 . TreeSet 보다 삽입, 삭제가 빠르다.
- LinkedHashSet
 . 입력된 순서를 보장한다.
- TreeSet
 . 이진 탐색 트리(Red-Black Tree)를 기반으로 한다.
 . 데이터들이 오름차순으로 정렬된다.
 . 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다.

Map 종류
- HashMap
 . Key에 대한 중복이 없으며 순서를 보장하지 않는다.
 . Key와 Value 값으로 NULL을 허용한다.
 . 동기화가 보장되지 않는다.
 . 검색에 가장 뛰어난 성능을 가진다.
- HashTable
 . 동기화가 보장되어 프로그램이이 가능하고 HashMap 보다 처리 속도가 느리다.
 . Key와 Value 값으로 NULL 허용을 하지 않는다.
- LinkedHashMap
 . 입력된 순서를 보장한다.
- TreeMap
 . 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다.
 . Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다.
 . 저장 시 정렬을 하기 때문에 시간이 다소 오래걸린다.


컬렉션 프레임워크

 

 

컬렉션 프레임워크

  • 널리 알려진 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색 할 수 있도록 관련 인터페이스와 클래스들을 포함시켜 놓은 java.util 패키지
  • 조요 인터페이스 : List, Set, Map

 

 

 

 

List 컬렉션

 

 

List 컬렉션

  • 객체를 인덱스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공

 

 

 

ArrayList

  • ArrayList에 객체를 추가하면 내부 배열에 객체가 저장되고 제한 없이 객체를 추가할 수 있음
  • 객체의 번지를 저장. 동일한 객체를 중복 저장 시 동일한 번지가 저장. null 저장 가능

  • ArrayList 컬렉션에 객체를 추가 시 인덱스 0번부터 차례대로 저장
  • 특정 인덱스의 객체를 제거하거나 삽입하면 전체가 앞/뒤로 1씩 당겨지거나 밀림
  • 빈번한 객체 삭제와 삽입이 일어나는 곳에선 바람직하지 않음

 

 

 

Vector

  • 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Vector() 메소드를 실행할 수 없음
  • 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있음

 

LinkedList

  • 인접 객체를 체인처럼 연결해서 관리. 객체 삭제와 삽입이 빈번한 곳에서 ArrayList보다 유리

 

 

 

 

 

Set 컬렉션

 

 

Set 컬렉션

  • Set 컬렉션은 저장 순서가 유지되지 않음
  • 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있음(수학의 집합 개념)

 

 

 

 

HashSet

  • 동등 객체를 중복 저장하지 않음
  • 다른 객체라도 hashCode() 메소드의 리턴값이 같고, equals() 메소드가 true를 리턴하면
    동일한 객체라고 판단하고 중복 저장하지 않음

  • iterator() 메소드: 반복자를 얻어 Set 컬렉션의 객체를 하나씩 가져옴

 

 

 

Map 컬렉션

 

 

Map 컬렉션

  • 키와 값으로 구성된 엔트리 객체를 저장
  • 키는 중복 저장할 수 없지만 값은 중복 저장할 수 있음. 기존에 저장된 키와 동일한 키로 값을 저장하면 새로운 값으로 대치

 

 

 

 

HashMap

  • 키로 사용할 객체가 hashCode() 메소드의 리턴값이 같고 equals() 메소드가 true를 리턴할 경우 동일 키로 보고 중복 저장을 허용하지 않음

 

 

Hashtable

  • 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Hashtable의 메소드들을 실행 불가
  • 멀티 스레드 환경에서도 안전하게 객체를 추가, 삭제할 수 있다.

 

 

 

 

 

Properties

  • Properties는 Hashtable의 자식 클래스. 키와 값을 String 타입으로 제한한 컬렉션
  • 주로 확장자가 .properties인 프로퍼티 파일을 읽을 때 사용
  • 프로퍼티 파일은 키와 값이 = 기호로 연결된 텍스트 파일(ISO 8859-1 문자셋, 한글은 \u+유니코드)
  • Properties 객체를 생성하고, load() 메소드로 프로퍼티 파일의 내용을 메모리로 로드

 

 

 

 

 

검색 기능을 강화시킨 컬렉션

 

 

TreeSet

  • 이진 트리를 기반으로 한 Set 컬렉션
  • 여러 개의 노드가 트리 형태로 연결된 구조. 루트 노드에서 시작해 각 노드에 최대 2개의 노드를 연결할 수 있음
  • TreeSet에 객체를 저장하면 부모 노드의 객체와 비교해서 낮은 것은 왼쪽 자식 노드에, 높은 것은 오른쪽 자식 노드에 저장

 

 

 

TreeSet 컬렉션을 생성하는 방법

TreeSet<E> treeSet = new TreeSet<E>();
TreeSet<E> treeSet = new TreeSet<>();

 

  • Set 타입 변수에 대입해도 되지만 TreeSet 타입으로 대입한 이유는 검색 관련 메소드가 TreeSet에만 정의되어 있기 때문

 

 

 

 

 

 

 

 

 

 

 

 

TreeMap

  • 이진 트리를 기반으로 한 Map 컬렉션. 키와 값이 저장된 엔트리 저장

 

  • 부모 키 값과 비교해서 낮은 것은 왼쪽, 높은 것은 오른쪽 자식 노드에 Entry 객체를 저장

 

 

 

 

 

 

 

 

 

 

ComparableComparator

  • TreeSet에 저장되는 객체와 TreeMap에 저장되는 키 객체를 정렬
  • Comparable 인터페이스에는 compareTo() 메소드가 정의. 사용자 정의 클래스에서 이 메소드를 재정의해서 비교 결과를 정수 값으로 리턴

  • 비교 기능이 없는 Comparable 비구현 객체를 저장하려면 비교자 Comparator를 제공
  • 비교자는 compare() 메소드를 재정의해서 비교 결과를 정수 값으로 리턴

 

 

LIFO와 FIFO 컬렉션

 

 

 

후입선출과 입선출

  • 후입선출(LIFO): 나중에 넣은 객체가 먼저 빠져나가는 구조
  • 선입선출(FIFO): 먼저 넣은 객체가 먼저 빠져나가는 구조
  • 컬렉션 프레임워크는 LIFO 자료구조를 제공하는 스택 클래스와 FIFO 자료구조를 제공하는 큐 인터페이스를 제공

 

 

Stack

  • Stack 클래스: LIFO 자료구조를 구현한 클래스
 

Queue

  • Queue 인터페이스: FIFO 자료구조에서 사용되는 메소드를 정의
  • LinkedList: Queue 인터페이스를 구현한 대표적인 클래스

 

 

 

 

동기화된 컬렉션

 

동기화된 컬렉션

  • 동기화된 메소드로 구성된 Vector와 Hashtable는 멀티 스레드 환경에서 안전하게 요소를 처리
  • Collections의 synchronizedXXX() 메소드: ArrayList, HashSet, HashMap 등 비동기화된 메소드를 동기화된 메소드로 래핑

 

 

 

수정할 수 없는 컬렉션

 

 

 

수정할 수 없는 컬렉션

  • 요소를 추가, 삭제할 수 없는 컬렉션. 컬렉션 생성 시 저장된 요소를 변경하고 싶지 않을 때 유용
  • List, Set, Map 인터페이스의 정적 메소드인
    of()로 생성
  • List, Set, Map 인터페이스의 정적 메소드인
    copyOf()을 이용해 기존 컬렉션을 복사
  • 배열로부터 수정할 수 없는 List 컬렉션을 만듦
728x90
반응형

'자바' 카테고리의 다른 글

자바 - 스트림 요소 처리  (0) 2023.01.27
자바 - 람다식  (0) 2023.01.27
자바 - 멀티 스레드  (0) 2023.01.25
자바 - 제네릭  (0) 2023.01.20
자바 - java.base 모듈  (0) 2023.01.18