Language/Java

List, Set, Map

JUNGKEUNG 2021. 10. 10. 09:56
반응형

List


  • List 에는 ArrayList, Vector, LinkedList, Stack, Queue가 있다.
  • 데이터가 순서대로 저장 되며 찾기가 수월하다.
  • 검색 및 삭제가 가능하며 중복이 가능하다

출처 : https://infondgndg91.blogspot.com/2020/07/java-native-method-with-systemarraycopy.html 

 

 

 

Set


  • HashSet, TreeSet 이 있으며 TreeSet는 이진 트리 구조로 되어있다.
  • 저장 순서가 유지되지 않습니다.
  • 중복이 안되며 null 도 저장이 가능하다

참고 : https://soft.plusblog.co.kr/74

 

 

 

Map


  • HashMap, HashTable, TreeMap, Properties
  • key와 value로 구성된 객체를 저장하고 있다.
  • key는 중복이 안되고 value는 중복이 가능하다. 만약 key에 중복이 발생하면 기존에 있던 key는 없어지고 새로운 key값이 저장된다.

참고 : https://soft.plusblog.co.kr/74

 

 

 

ArrayList


ArrayList는 데이터가 인덱스에 순서대로 저장이 되어 쉽고 빠르게 데이터을 찾을수 있다는 장점이 있다. 하지만 추가, 삭제 같은 경우에는 좋은 편은 아니다.

추가 시 데이터가 맨뒤에 추가가 된다면 O(1)이 걸리지만 만약 맨뒤가 가득찬 상태에서 추가가 된다면 기존에 있던 ArrayList와 같은 크기의 ArrayList가 한개더 생성 되면서 기존에 있던 ArrayList가 새로 생긴 ArrayList에 데이터가 들어가고 추가한 데이터가 저장이 되어 O(n)이라는 시간이 걸린다.

삭제 시 데이터가 맨뒤에 있는걸 삭제하면 O(1)이라는 시간이 걸리지만 앞이나 중간에 있는 값을 삭제하면 데이터들이 한칸씩 당겨야 하므로 O(n)이 걸린다.

 

 

 

LinkedList


LinkedList는 데이터가 노드에 저장되어 있고 그 다음 노드의 주소값을 가르키고 있다.

검색 및 탐색 할때는 처음 노드부터시작해서 시간이 오래 걸리지만 추가, 삭제는 빠르게 진행된다.

크기가 정해져 있지 않거나 삽입과 삭제가 자주 일어나거나 검색을 자주 하지 않을 때는 LinkedList를 사용하는것이 좋다

LinkedList는 탐색할때 처음부터 탐색하기때문에 O(n)이 걸린다.

추가하는 데이터가 맨앞이면 O(1)이 걸리지만 그 이후로는 O(n)이 걸린다.

삭제하는 데이터가 맨앞이면 O(1)이 걸리지만 그 이후로는 O(n)이 걸린다.

 

 

 

HashSet


hashset은 중복이 안되고 저장 순서를 유지하지 않으므로 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다.

 

 

 

TreeSet


TreeeSet은 hashset과 같은 성질을 가지고 있으나 이진트리로 되어있고 이진트리의 성능을 향상시킨 '레드 블랙 트리'로 구현되어있습니다.

레드 블랙 트리는 이진트리에 성능을 높인 트리로써 왼쪽에는 작은 노드 오른쪽에는 큰 노드를 저장하는데 한쪽으로만 치우지지 않도록 만든것이 레드 블랙 트리이다.

 

 

 

HashMap


검색하고자 하는 key값을 입력받아서 hash 함수를 돌려서 hashcode로 받고 배열에 index에 접근하는 방식이다

hash함수를 이용해서 만든 hashcode는 정수 이다 그래서 배열 공간을 고정된 크기만큼 만들어 놓고 hashcode를 배열의 개수로 나머지 연산을 해서 배열에 나누어 담는다

hashcode 자체가 배열방에 index로 사용되기 때문에 검색 자체가 할 필요도없고 hashcode로 바로 접근이 가능하기 때문이다.

 

 

 

HashTable


hashtable은 hashmap과 동일한 내부 구조를 가지고 있다.

hashmap과의 차이점은 hashtable은 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행 할수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할수있다.

 

 

 

Properties


HashTable을 상속받아 구현한 것입니다. key와 value를 String값으로 받아서 사용하고 파일 입출력의 기능을 사용할 때 주로 사용한다.

 

 

 

TreeMap


TreeMap에 객체를 저장하면 자동으로 정렬된다. 기본적으로 부모 키값을 비교하여 낮은 건 왼쪽에 높은것은 오른쪽 자식 노드에 Map.Entry객체를 저장한다.

treeSet과 차이점은 키와 값이 저장된 Map.Entry를 저장한다는 점이다.

array와 HashTable

array 같은경우 검색과 탐색은 O(1)이다.

 

 

 

Stack


LIFO(Last-IN-First-Out)

어떠한 데이터들을 순차적으로 저장할 수 있으며 입구와 출구가 하나밖에 존재하지 않는 자료구죠이다.

  • pop스택의 가장 최상위(마지막)에 위치한 데이터를 추출한 후에 스택에서 삭제합니다.
  • push스택의 가장 최상위(마지막)에 데이터를 삽입합니다.
  • clear스택에 저장된 모든 데이터를 삭제하고 스택을 초기화합니다.
  • peek스택의 가장 최상위(마지막)에 위치한 데이터를 추출합니다.pop 메서드와는 달리 스택에서 데이터를 삭제하지 않습니다.

 

 

 

Queue


FIFO(First In First Out)

먼저 들어간 데이터가 먼저 나오는 자료구조이다 쉽게 생각하면 은행에서 번호표를 먼저 뽑은 사람이 먼저 일을 처리할 수 있는 것 처럼 큐에서는 먼저 입력된 데이터가 먼저 빠져나오게 된다.

'Language > Java' 카테고리의 다른 글

[주말 스터디]toString과 valueOf 차이  (0) 2021.11.06
직렬화 역직렬화  (0) 2021.11.01
StringBuffer클래스  (0) 2021.10.03
java.lang패키지와 유용한 클래스  (0) 2021.10.03
예외 처리  (0) 2021.09.27