본문 바로가기

언어/JAVA

22장 자바 컬렉션 part1

자바에서 컬렉션은 목록성 데이터를 처리하는 자료구조를 통칭한다.

 

자료구조

영어로 "Data Structure"라고한다. 다시 말해서, 어떤 정보를 담는 것을 의미하는데, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. (ex. 배열)

  • 순서가 있는 목록(List)형
  • 순서가 중요하지 않은 셋(set)형
  • 먼저 들어온 것이 먼저 나가는 큐(Queue)형
  • 키-값으로 저장되는 맵(Map)형

자바컬렉션 관련 클래스

"List", "Set", "Queue"는 컬렉션이라는 인터페이스를 구현하고있다. 이 Collection인터페이스는 java.util패키지에 선언되어있으며, 여러개의 객체를 하나의 객처에 담아 처리할 때 공통적으로 사용되는 여러 메소드들을 선언해 놓았다. 이 목록에서 유일하게 "Map"만이 컬렉션과 관련없는 별도의 인터페이스로 선언되어있다.

 

인터페이스 구현 클래스 특징
List LinkedList
Stack
Vector
ArrayList
순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.

순서 O, 데이터중복 O
Set HashSet
TreeSet

순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. 

순서 X, 데이터중복 X
Map  HashMap
TreeMap
HashTable
Properties

키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합이다.

 순서는 유지되지 않고, 키는 중복을 허용하지 않으며 값의 중복을 허용한다.

key&value저장, key 중복 X, value 중복 O

 

List

List는 Collection 인터페이스에서 확장되었다. 몇몇 추가된 메소드를 제외하고는 Collection에 선언된 메소드와 큰 차이는 없다. Collection의 다른 인터페이스와는 다르게 배열처럼 "순서"가 있다는 것이다.

List 인터페이스를 구현한 클래스는 매우 많다. 그 많은 클래스 중에서 java.util 패키지에서는 ArrayList, Vector, Stack, LinkedList를 많이 사용한다. 

 

  • ArrayList : 단방향 포인터 구조로, 순차 접근에 강점이 있으며, Thread Safe 하지 않다. 내부적으로는 Red-Black Tree 로 구성되어 있다.
  • Vector : ArrayList의 구형버전이며, 모든 메소드가 동기화 되어 있어 Thread-Safe 하다. 단 그만큼 퍼포먼스는 좋지 않다.
  • LinkedList : ArrayList는 내부 배열 객체를 저장해서 인덱스로 관리하지만, LikedList는 링크로 관리한다. 때문에 빈번한 삭제/삽입에서 좋은 성능을 나타낸다.

Set

Set은 중복된 요소를 포함할 수 없다. List와는 다르게 인덱스를 사용하지 않기 때문에, 인덱스 매개변수가 없다.

  • HashSet: 가장빠른 임의 접근속도, 순서를 전혀 예측할 수 없다.
  • TreeSet: 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있다.
  • LinkedHashSet: 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근가능

 

MAP

키와 값의 쌍으로 이뤄진 데이터의 집합, 순서는 유지되지않으며 키는 중복을 허용하지않고 값은 중복을 허용한다.

  • HashMap: Map 인터페이스를 구현하기 위해 해시테이블을 사용하는 클래스며, 중복X / 순서보장X / null값허용
  • TreeMap: 이진검색트리의 형태로 키와 값의 쌍으로 이뤄진 데이터 저장,                                                                     정렬된 순서로 키/값 쌍을 저장하므로 검색이 가능, 저장시 오름차순으로 저장하기에 시간이 오래걸림
  • HashTable: HashMap보다는 느리지만 동기화가 지원되며 키,값으로 null이 허용되지않는다.
  • LinkedHashMap: HashMap을 상속받아 HashMap과 매우흡사, Map에 있는 엔트리들의 연결리스트를 유지되므로                          입력한 순서대로 반복가능

'언어 > JAVA' 카테고리의 다른 글

Java 입출력 (InputStream/OutputStream)  (0) 2021.12.11
Hash  (0) 2021.12.07
21장 제네릭  (0) 2021.11.04
20장 java.lang 패키지  (0) 2021.11.03
19장 자바의 역사 / JVM  (0) 2021.10.30