Java Collection - List, Set, Map

여상우·2022년 9월 3일
0

Java

목록 보기
4/4

드디어 올것이 왔다 Java의 Collection 클래스.. 매번 쓰고도 매번 헷갈려서 한 번 정리가 제대로 필요했는데 이번에 정리를 해보려고 한다.😌😌


1. List

List는 일반적인 Array를 좀 변형한 Class라고 볼 수 있다.
Array가 크기가 정해져 있고, index가 있어 순서가 있어 탐색이 가능하다는 점이 특징이라면
List는 크기가 가변적이고, index가 있어서 순서가 있으며, .get(index)로 탐색이 가능하다는 점이 특징이다.
그리고 종류에는 두 가지가 있는데

  • 첫번째는 'ArrayList'로 다음과 같이 선언이 가능하다.
List<자료형> 변수명 = new ArrayList<>();

이친구는 아까 설명했던 것 처럼 index가 있기 때문에 탐색 에서 성능이 좋다는 점이 특징이다. (시간복잡도 면에서)
대신, 데이터를 넣고 빼는 등의 추가, 제거 동작 에는 나머지 데이터들을 복사해서 옮겨주어야 하기 때문에 시간복잡도 면에서 불리하다는 단점을 가지고 있다.
이 때는 아래의 'LinkeList'를 사용하면 추가, 제거 동작 에서 빠르게 진행이 가능하다.

  • LinkedList 선언
List<자료형> 변수명 = new LinkedList<>();

기본적으로 LinkedList는 각 node의 앞 뒤 정보가 저장되어있기 때문에 데이터의 추가삭제 동작이 굉장히 빠르다. 따라서 많은 데이터를 추가 및 삭제 할 경우 LinkedList를 사용하면 좋다!

2. Set

Set은 가장 큰 특징이 중복을 허용하지 않는다 라는 점이다.
알고리즘도 그렇고, 일반적으로 배열에 중복이 들어가지 않아야 하는 것들이 꽤나 많기 때문에 이 특징을 사용하면 문제들을 좀 쉽게 해결하는데 도움이 된다.

Set은 종류가 3가지가 있다. HashSet, LinkedHashSet, TreeSet
각각의 특징들을 살펴보면

  1. HashSet : 가장 기본적인 Set. 순서가 없으며, 중복이 허용되지 않는 Set이다. 다음과 같이 선언한다.
Set<자료형> 변수명 = new HashSet<>();
  1. LinkedHashSet : HashSet인데 Linked가 되어있으므로 입력순서대로, 순서가 있는 Set 이다. 기본적으로 Set이니까 중복이 허용되지 않는것은 동일하지만 HashSet과는 다르게 데이터가 중구난방이 아니라는점에서 자주 사용될 수 있다.
    다음과 같이 선언한다.
Set<자료형> 변수명 = new LinkedHashSet<>();
  1. TreeSet : HashSet인데 원하는 형태대로 정렬을 할 수 있는 Set이다.
    오름차순, 또는 내림차순으로 Set을 정렬할 수 있다 는 점이 큰 특징이 된다.
    선언은 다음과 같이 선언한다.
Set<자료형> 변수명 = new TreeSet<>(); //일반적인 오름차순
Set<자료형> 변수명 = new TreeSet<>(Collections.reverseOrder()); //내림차순 정렬
Set<자료형> 변수명 = new TreeSet<>(Comparator.reverseOrder()); //내림차순 정렬 2

Collections를 쓴 뒤 Order 메소드를 사용하면 기본적으로 Comparator가 뜨는 것으로 보아 이 역시도 Comparator를 사용하는 듯 하다.
따라서 무엇을 쓰던간에 상관없어보임!!

3. Map

맵은 각각의 값이 들어가는데, 그 값들이 각각의 '유일무이한 키 값을 가지고 있다' 는 점이 특징이라고 할 수 있다.
우리가 Array나 List를 사용하면서 인덱스를 확인 할 수는 있지만, 그 인덱스는 유일무이한 값이 아니라 해당 위치의 데이터 주소와 가까운 값이라고 할 수 있다. 따라서 얼마든지 변화가 가능한데, 키 값은 변하지 않는다는 특징을 가지고 있으므로, 어떤 방식이던지 키 값만 온전하다면 찾아낼 수 있다는 장점을 가지고 있다. (키는 중복이 없지만, 들어간 값은 동일한 값이 존재가능하다)

- TreeMap은 기본적으로 key값을 기준으로 정렬된다! -

Map의 종류에는 HashMap, LinkedHashMap, TreeMap, Hashtable이 존재한다.
다 다루지는 않지만, 위의 Set에서 이미 한 번 보았던 것 처럼 HashMap은 순서 없이 존재하는 Map, LinkedHashMap은 넣은 순서대로 존재하는 HashMap, TreeMap은 원하는 형태대로 정렬이 가능한 HashMap이다.
선언은 다음과 같은 방식으로 선언한다.

Map<키의 자료형, 정보의 자료형> 변수명 = new HashMap<>();
Map<키의 자료형, 정보의 자료형> 변수명 = new LinkedHashMap<>();
Map<키의 자료형, 정보의 자료형> 변수명 = new TreeMap<>();

일단 내가 보려고 간단하게 정의랑 선언법만 빠르게 정리했는데 나중에 시간이 되면 사용법도 정리해보아야겠다(하지 않겠다는 소리)😛

profile
Keep forwarding person.

0개의 댓글