일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- Where
- mysql
- 자바
- 정보처리기사 합격
- HTML
- JVM Heap
- Model
- jqgrid 개념
- jqGrid
- JQuery
- extends
- 정보처리기사 필기
- 트랜잭션
- MariaDB
- Class
- 스프링
- 정처기 합격
- ModelMap
- HTTP
- ModelAndView
- ResponseBody
- implements
- 제이큐그리드
- 개발자 이직
- SQL
- Javascript
- 어노테이션
- View
- spring
- Today
- Total
크리스의 개발일기
[JAVA] Collection(컬렉션)이란? 본문
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)을 저장하여 검색이 빠름
출처 :
<자바의 신>
'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 |