Skipalong's tistory
231020 TIL - JAVA Collection 본문
오늘은 JAVA Collection 문법에대해 배운 것을 정리하려고 한다.
먼저 Collection 에는 크게 List, Set, Map 그리고 Stack과 Queue가 있다고 한다.
각각의 특징을 분류해 보면
- List : 순서와 값의 중복을 허용한다는 점에서 배열과 유사하다 하지만 크기를 정해놓지 않아서 배열과다르게 값을 원하는 만큼 추가할 수 있다.
- Set : List와 배열과는 다르게 중복을 허용하지 않고 순서도 정해져있지 않다 이러한 점에서 집합이라는 개념으로 보면 될 것 같다.
- Map : 다른 Collection들과는 다르게 key_value 쌍으로 이루어져있다. 순서는 없고 value값에는 중복을 허용하지만 key값에는 중복을 허용하지 않는다는 특징이 있다.
- Stack, Queue : Stack은 바구니처럼 아래부터 하나씩 넣어서 FirstInLastOut 이라는 특징있고 Queue는 반대로 원통형 같이 차례대로 빠져나가듯 FirstInFirstOut구조로 되어있다.
여기서 좀 더 자세히 들어가보면
List에는 ArrayList, LinkedList가 있다.
이 둘의 차이는 ArrayList는 연속된 메모리에 객체를생성(?) 값을저장(?)하고 LinkedList는 이름대로 메모리의 이곳저곳 남는 공간을 이용한다. 따라서 둘을 활용할 때 ArrayList는 값을 조회하는데 강점이있고 LinkedList는 값을 추가, 삭제할 때 강점이 있다.
- 기능
- 선언 : Array(or Linked)List<T> List형태로 선언합니다.
- 생성 : new Array(or Linked)List<T>(); 형태로 생성합니다.
- 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
- 값 추가 : List.add({추가할 값}) 형태로 값을 추가합니다.
- 값 수정 : List.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
- 값 삭제 : List.remove({삭제할 순번}) 형태로 값을 삭제합니다.
- 전체 출력 : List.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
- 전체 제거 : List.clear() 형태로 전체 값을 삭제합니다.
- 원하는 순서에 값을 추가(LinkedList만) : list.add({추가할 순번},{추가할 값}) 형태로 값을 중간에 추가합니다.
Set에는 HashSet, TreeSet, LinkedHashSet이 있다.
HashSet은 가장 빠르며 순서를 예측할 수 없다는 특징이 있고, TreeSet은 정렬된 순서대로 저장을 하고 정렬방법을 지정할 수 있다고 한다. 그리고 LinkedHashSet은 추가된 순서 또는 가장 최근에 접근한 순서대로 접근이 가능하여 보통은 HashSet, 순서보장이 필요할 땐 LinkedHashSet을 주로 사용한다고 한다.
- 기능
- 선언 : Set<T> Set 형태로 선언합니다.
- 생성 : new HashSet<T>(); 형태로 생성합니다.
- 추가 : Set.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 조회 : Set.get({초회할 순번}) 형태로 순번에 있는 값을 조회합니다.
- 삭제 : Set.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정합니다.
- 포함확인 : Set.contains({포함확인 할 값}) 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받습니다.
Map 에는 HashMap, TreeMap이 있다.
Set과 유사하게 HashMap은 중복과 순서가 없고 key와 value 값으로 null을 허용한다. TreeMap은 key값을 기준으로 오름차순으로 정렬을 할 수 있다고 한다.
- 기능
- 선언 : Map<T, U> map 형태로 Key타입과 Value타입을 지정해서 선언합니다.
- 생성 : new HashMap<>(); 형태로 생성합니다.
- 추가 : map.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가합니다.
- 조회 : map.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회합니다.
- 전체 key 조회 : imap.keySet() 형태로 전체 key 값들을 조회합니다.
- 전체 value 조회 : map.values() 형태로 전체 value 값들을 조회합니다.
- 삭제 : map.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제합니다.
Stack
- 기능
- 선언 : Stack<T> stack 형태로 선언합니다.
- 생성 : new Stack<T>(); 형태로 생성합니다.
- 추가 : stack.push({추가할 값}) 형태로 값을 추가합니다.
- 조회 : stack.peek() 형태로 맨 위값을 조회합니다.
- 꺼내기 : stack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고나면 삭제됨)
Queue
- 기능
- 선언 : Queue<T> Queue 형태로 선언합니다.
- 생성 : new LinkedList<>(); 형태로 생성합니다.
- 추가 : queue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 조회 : queue.peek() 형태로 맨 아래값을 조회합니다.
- 꺼내기 : queue.poll() 형태로 맨 아래값을 꺼냅니다. (꺼내고나면 삭제됨)
그리고 Collection 은 공통적으로 size()메서드를 이용해 컬렉션의 길이를 구할 수 있다.
이렇게 처음에는 배열만을 사용해서 자료구조를 정리하였는데 Collection의 많은 자료구조를 공부한 뒤엔 상황별로 가장 유리한 Collection을 선택해서 사용해야하기 때문에 각각의 특징(장점)을 잘 생각해보고 자료구조를 선택해야 할 것 같다.
그간 알고리즘 문제에서 잘 풀리지않아 힌트를 보면 stack, queue, map등을 활용하여 풀어야하는 문제들이 보이곤 했는데 이제 그 문제들을 Collection을 적절히 활용하여 풀어봐야겠다.
'TIL' 카테고리의 다른 글
231024 TIL - git basic command (0) | 2023.10.25 |
---|---|
231023 TIL - 프로그래머스 영어 끝말잇기 (0) | 2023.10.24 |
231022 TIL - 프로그래머스 짝지어 제거하기 (2) | 2023.10.23 |
231021 TIL - 프로그래머스 올바른괄호 (0) | 2023.10.22 |
231019 TIL - Kiosk (0) | 2023.10.19 |