호비시의 끄적끄적

List, Set, Map 본문

자료구조

List, Set, Map

호비시 2022. 6. 26. 09:00

Java Collection

Java Collection의 주요 인터페이스는 List, Set, Map이다. 이 인터페이스들을 구분하는 가장 중요한 개념은 순서와 중복이다.

  • List : 순서 있다. 중복 가능
  • Set : 순서 없다. 중복 불가능
  • Map : Key-Value 저장, Key 중복 불가능, Value 중복가능

List

List는 데이터 순서에 맞게 배열처럼 구성한다. 인덱스가 부여되기 때문에 인덱스로 검색이 가능하다. 중복을 허용한다.

List 인터페이스를 구현한 클래스는 ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector 가 있다. 이 중 자주 사용하는 ArrayList와 유사한 LinkedList를 비교 설명하겠다.

 

ArrayList
ArrayList는 저장 용량이 자동으로 늘어난다. 기본 생성자로 생성하면 10개의 저장 용량을 갖는다. 처음부터 용량을 크게 잡을수도 있다. ArrayList는 Object 타입으로 변환하여 저장한다. 모든 종류의 객체를 저장할 수 있지만, 저장 조회 할 때 Object로 변환해야하므로 성능이 좋지않다. 이를 보완하기 위해 제네릭을 사용한다.

 

ArrayList vs LinkedList
일반적으로 ArrayList가 LinkedList보다 검색이 빠르다. 순차적으로 배열에 객체를 추가, 삭제 하는 경우 ArrayList가 성능이 더 좋다.
배열의 중간 위치에 추가 될 때 ArrayList는 크기를 조정하거나, 인덱스를 업데이트 해야한다. 하지만, LinkedList는 이전 노드의 다음 주소를 나타내는 값만 변경하면 되기 때문에 링크된 목록에서 객체의 추가, 제거 작업은 LinkedList가 ArrayList보다 더 빠르다. 하지만 앞뒤 두개의 참조를 사용하기에 메모리 영역을 많이 차지한다.

Set

Set은 중복을 허용하지 않는다. 인덱스가 부여되지 않기 때문에, 매게변수가 없다.

Set 인터페이스를 구현한 클래스는 HashSet, Linked HashSet, TreeSet이 있다.

Stream 을 통해서, List로 변환할 수 있다.
  Set<String> set = new HashSet<>();
  set.add("영어");
  set.add("수학");
  set.add("국어");
  List<String> list = set.stream().collect(Collectors.toList());

Map

Map은 Key-Value 형태로 객체를 저장한다. Key는 중복하여 저장할 수 없다.

Map 인터페이스를 구현한 클래스는 HashMap, TreeMap, LinkedHashMap, Hashtable가 있다.

HashMap Iteratring
maps. keyset(), maps.valuest(), maps.entrySet()

 

'자료구조' 카테고리의 다른 글

Stack, Queue  (0) 2022.07.05
Comments