크리스의 개발일기

[JAVA] Collection(컬렉션)이란? 본문

JAVA

[JAVA] Collection(컬렉션)이란?

ChrisJang 2020. 11. 12. 11:21

Collection(컬렉션)이란?

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

자료구조(Data Structure)는 어떤 정보를 담는 것을 의미하여, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용하는 것이다.

배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다.


* 자바에서의 자료구조 유형

- 순서가 있는 목록인 List형

- 순서가 중요하지 않은 목록인 Set형

- 먼저 들어온 것이 먼저 나가는 Queue형

- KEY-VALUE의 형태로 저장되는 Map형

 

 

1. Set 인터페이스

 

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

  • HashSet
    - 가장빠른 임의 접근 속도
    - 순서를 예측할 수 없음

문법(복붙용)

import java.util.HashSet;

public class CollectionTemp {

	public static void main(String[] args) {
		
			HashSet<String> hs = new HashSet<String>(); // HashSet 선언
		
			hs.add("홍길동");
			hs.add("아기장수 우투리");
			hs.add("홍길동");
			hs.add("춘향");

			System.out.println(hs);

			
	}

}

//결과 [홍길동,춘향,아기장수 우투리]
// 홍길동을 두번 넣었음에도 한번만 값이 넣어져있다. (HashSet의 특성인 중복값 무시)
  • TreeSet
    - 정렬방법을 지정할 수 있음
import java.util.TreeSet;

public class CollectionTemp {

	public static void main(String[] args) {
		
			TreeSet<String> ts = new TreeSet<String>();
			
			   	ts.add("apple");
		        ts.add("airplane");
		        ts.add("alien");
		        ts.add("disc");
		        ts.add("dance");
		        
		        System.out.println(ts.headSet("b"));
		        System.out.println(ts.subSet("a", "al"));
		        System.out.println(ts.tailSet("c"));
			
	}

}
//결과 : [airplane,alien,apple] ts.headSet("b") 시작이 b 보다 작은 a로 시작하는 데이터들
//		 [airplane]  ts.subSet("a", "al") a ~ al 사이에 있는 데이터 from ~ to 
//		 [dance,disc] ts.tailSet("c") headSet의 반대 시작이 c 보다 큰 d부터 시작하는 데이터들

 

HashSet vs TreeSet 

: HashSet과 TreeSet 모두 중복을 허용하지 않고 순서가 없는 컬렉션

1. 구현 방식
 - HashSet은 해싱을 이용하여 구현
 - TreeSet은 이진탐색트리를 이용하여 구현

2. 속도 비교
 - HashSet > TreeSet
 - 해싱이 이진탐색트리보다 빠르다

3. 정렬 기능
 - HashSet < TreeSet
 - 이진탐색트리를 이용했기 때문에 데이터 정렬이 가능 (Comparator 이용)

 

성능

HashSet > TreeSet > LinkedHashSet

 

예시) 이런 상황을 가정해보겠습니다.

어떤 웹 사이트에서 하루에 접속하는 사람들 수를 구하고자 합니다.

접속하는 IP를 세면 되겠죠.

근데 한사람이 여러번 접속하면 한 IP가 여러번 찍힐 것입니다.

이건 한번으로 카운트 해줘야 제대로 된 접속자 수를 구할 수 있습니다.

이럴 때 쓰는게 Set입니다.

그냥 수학에서 집합 이라고 보시면 됩니다.

 

2. List 인터페이스

순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.

  • LinkedList
    - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
    - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
  • Vector
    - 과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
  • ArrayList
    - 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남

 

3. Map 인터페이스

키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로,

순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용한다.

 

  • Hashtable
    - HashMap보다는 느리지만 동기화 지원
    - null불가
  • HashMap
    - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
  • TreeMap
    - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름



 

출처 : 

tenlie10.tistory.com/10

<자바의 신>

java119.tistory.com/6

'JAVA' 카테고리의 다른 글

[JAVA] baseMap 분석 (수정)  (0) 2020.11.16
[JAVA] Call by value 와 Call by reference 차이  (0) 2020.11.12
[JAVA] new 연산자란?  (0) 2020.11.12
[아키텍처 패턴] MVC 패턴이란?  (0) 2020.11.12
[JAVA] @pathvariable에 대한 분석  (0) 2020.11.06
Comments