You are a developer, not a coder.

Collection의 종류와 이해 본문

Backend-Languages/Java

Collection의 종류와 이해

Mattmk 2023. 5. 18. 13:39
SMALL

1.  JAVA Collection Framework

  • JAVA에서 기본적인 자료구조를 제공하기 위한 환경

 JAVA Collection Framework의 상속 기본 구조

2. 각 인터페이스의 특징

인터페이스 구현 클래스 특징
List LinkedList
Stack
Vector
ArrayList
순서가 있는 데이터의 집합, 데이터의 중복을 허용함
Set HashSet
TreeSet
순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음
Map HashMap
TreeMap
HashTable
Properties
키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않고, 키는 중복을 허용하지 않으며 값의 중복을 허용함

 

3. Collection 인터페이스들의 특징

  • Collection 인터페이스를 상속받아 List와 Set 인터페이스가 된다. 

가. List 인터페이스의 특징

  • 순서가 있는 Collection(여기서 순서는 삽입된 순서를 의미한다.)
  • Data를 중복해서 포함 할 수 있다.

(1). LinkedList의 특징

  • LinkedList만 정의한 내용이 있으니 아래 주소 참고

https://hwan1001.tistory.com/5

 

[JAVA] 자료구조 클래스 - LinkedList(연결리스트)

1. LinkedList(연결리스트) - LinkedList란 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. - 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있..

hwan1001.tistory.com

(2). Stack의 특징

  • Data의 삽입과 추출이 후입선출(LIFO) 구조로 되어 있다.
  • push() method : Data 삽입 할 때 사용
  • pop() method : Data 추출 할 때 사용
  • peek() method : 추출할 Data를 삭제하디 않고 Data만을 가져올 때 사용
  • search() method : Stack으로부터 Data를 검색할 때 사용

(3). Vector의 특징

  • 자동으로 동기화를 보장해 준다.
  • ArrayList에 동기화가 보장되도록 최적화한 클래스이다.
  • addElement() method : Data를 삽입할 때 사용 
  • elementAt() method : Data를 추출할 때 사용, Index에 해당하는 객체를 얻어냄
  • size() method : Vector 내에 존재하는 객체의 수를 얻어낼 대 사용
  • insertElementAt() method : Vector 내에 중간 삽입할 때 사용
  • setElementAt() method : Vector 내에 존재하는 Data를 수정할 때 사용
  • indexOf() method : Vector 내에 Data를 검색할 때 사용, Index를 반환
  • contains() method : Data의 존재 유무를 알기 위해 사용.

(4). ArrayList의 특징

  • 동기화를 보장해주지 않는다.
  • 배열에 동적 메모리 증가 기능을 구현한 클래스이다.
  • 동기화 지원 방법 : List list = Collections.synchronizeList(new ArrayList(…));
  • add() method : Data 삽입할 때 사용
  • get() method : Data 추출할 때 사용
  • toArray() method : ArrayList로부터 배열을 얻어낼 때 사용
  • contains() method : Data의 존재 유무를 알기 위해 사용
  • size() method : ArrayList의 요소 개수를 얻어낼 때 사용

나. Set 인터페이스의 특징

  • 집합적인 개념의 Collection
  • 순서의 의미가 없다.
  • Data를 중복해서 포함 할 수 없다.

(1). HashSet의 특징

  • add() method : Data 삽입할 때 사용
  • next() method : Data 추출할 때 사용(HashSet의 Data 추출은 Iterator을 이용하면 됨)
  • remove() method : Data를 삭제할 때 사용
  • contains() method : Data의 포함여부를 알기 위해 사용
  • size() method : HashSet의 요소 개수를 얻어낼 때 사용

4. Map 인터페이스들의 특징

  • List와 Set이 순서나 집합적인 개념의 인터페이스라면 Map은 검색의 개념이 가미된 인터페이스다.
  • Map인터페이스는 데이터를 삽입할 때 Key와 Value의 형태로 삽입되며, Key를 이용해서 Value를 얻을 수 있다.

가. Hashtable, HashMap의 공통점

  • 내부적으로는 모두 Hash 기법을 이용한다.
  • Map 인터페이스를 구현하고 있다.
  • Key와 Value를 이용해서 Data를 관리한다.

나. Hashtable, HashMap의 차이점

  • Hashtable은 동기화가 보장된다.
  • HashMap은 동기화가 보장되지 않는다.
  • HashMap의 동기화 지원 방법 : Map m = Collections.synchronizedMap(New HashMap(…));

다. Hashtable, HashMap과 HashSet과의 관계

  • HashTable과 HashMap은 둘 다 Map 인터페이스를 구현하고 있다.
  • HashSet은 내부적으로 Hash기법을 사용하지만 Set인터페이스를 구현하고 있다

라. HashMap

  • 객체 생성 : Map<String, Integer> map = new HashMap<String, Integer>();
  • put() method : Data 삽입할 때 사용
  • get() method : Data를 추출할 때 사용, argument값은 Key를 사용

마. HashTable

  • 체 생성 : Hashtable<String, Object> h = new Hashtable<String, Object>();
  • put() method : Data 삽입할 때 사용
  • get() method : Data를 추출할 때 사용, argument값은 Key를 사용

 

5. Sorted 인터페이스들의 특징

  • Set과 Map 인터페이스를 상속받아 정렬 기능이 추가된 SortedSet과 SortedMap 인터페이스가 된다. 그리고 이들은 각각 TreeSet 클래스와 TreeMap 클래스로 구성된다. TreeSet과 TreeMap은 Set과 Map의 기능을 가지고 있으면서 정렬 기능이 가미되었다는 것이 특징이다.

가. Sorted를 지원하지 않는 클래스

  • HashSet, HashMap

나. Sorted를 지원하는 클래스

  • TreeSet, TreeMap

다. TreeMap

  • Key와 Value로 Data를 관리
  • Key를 기준으로 오름차순으로 정렬된다.
  • Map 인터페이스를 상속한 SortedMap 인터페이스를 구현한 클래스

라. TreeSet

  • Set 인터페이스를 상속한 SortedSet 인터페이스를 구현한 클래스
  • 데이터들이 자동으로 오름차순으로 정렬된다.

마. Comparator

  • TreeSet과 TreeMap은 사용자가 직접 정렬의 방식을 지정할 수 있다.
  • TreeSet과 TreeMap은 정렬을 위한 Comparator 인터페이스를 구현하면 된다.
  • TreeSet에 Data를 집어 넣으면 기본적으로 오름차순(Ascending) 정렬이 되지만 그것도 문자열이나 기본 데이터 타입과 같은 단순한 것에만 해당된다. 이에 사용자가 직접 비교법을 넣어주기 위해 사용하는 것이 Comparator 인터페이스이다.
LIST

'Backend-Languages > Java' 카테고리의 다른 글

String, StringBuffer, StringBuilder에 대해서  (0) 2023.05.18
Java Map 반복(Iteration)시키는 3가지 방법  (0) 2023.05.18
subList 알맞게 사용하는 방법  (0) 2021.02.24
COLLECTIONS.EMPTY_LIST  (0) 2020.12.15
JSON Pasing Tip  (0) 2020.12.01
Comments