본문 바로가기

Development/Java

collection framework의 interface(List, Set, Map)별 주요 method 정리

공식문서에서는 method에 대해 서술할 때 타입을 일일이 설명해 주기 때문에 직관적으로 외우기 불편하다. 그래서 이곳에 내가 기억하기 편한 방식으로 정리해 두려 한다. 각 구현 클래스들에 관한 것은 시간이 된다면 다음 포스팅에서 다룰 예정이다. '이것이 자바다' 교재를 통해 공부한 내용과 개인적인 이해방식을 바탕으로 작성했으므로 틀린 내용이 있을 수 있다.

 

List와 Set은 Collection 인터페이스를 상속하는 자식 인터페이스이고, Map은 독립(POJO) 인터페이스이다. 셋 다 java.util 패키지에 속해 있으므로, 사용하려면 인터페이스를 가져오는(import) 작업이 필요하다.

 

 

 


 

 

List

 

 

List는 index 순서대로 저장하는 방식이다. 다른 index에 같은 내용의 객체를 중복 저장할 수 있다. 대표적인 구현 클래스로는 ArrayList, Vector, LinkedList가 있다.

 

외우기 편한 방식으로만 작성했으므로, 표현방식이 엄밀하지 않은 점을 감안해야 한다.

 

 

  method 실행내용
추가 add(저장값) 저장값 추가
add(index, 저장값) index에 저장값 추가
set(index, 저장값) index의 저장값을 교체
삭제 remove(저장값) (하나의) 저장값 삭제
remove(index)  index의 저장값 삭제
clear() 모두 삭제
검색 get(index) index의 저장값 불러오기
contains(저장값) 저장값이 있는지 확인
isEmpty() 비어 있는지 확인
size() List 크기 확인

 

 

remove의 경우 특정 정수값을 삭제할 때는 index와 구분하기 위해 remove( Integer.valueOf(정수값) )을 사용해야 한다.

 

get/set과 add/remove 메소드에서 ArrayList와 LinkedList의 시간복잡도가 갈리게 된다. 어떤 작업을 주로 하느냐에 따라 유리한 구현 클래스를 선택하는 것이 좋다. 이는 다음 포스팅에서 다룰 예정이다.

 

해당 포스팅에서 다루게 되었다(https://hellmir.tistory.com/entry/Linked-List-%EA%B5%AC%EC%A1%B0%EC%9D%98-%EC%9D%B4%ED%95%B4).

 

Linked List 구조의 이해

Linked List의 개념 Linked List는 데이터를 저장하는 자료구조로, 각각의 데이터들은 노드(Node)라는 객체로 구성된다. node는 data와 다음 노드를 가리키는 pointer로 이루어져 있다. data의 저장과 조작에 i

hellmir.tistory.com

 

 

Set

 

 

Set은 index 없이 집합으로 저장하는 방식이다. index가 없으므로, 같은 내용의 객체를 중복 저장하지 않는다. 참조하는 메모리 번지가 같을 뿐만 아니라, 구분해 줄 수 있는 index가 없어 여러 번 저장해도 쓸모가 없기 때문이다. 즉, 같은 내용을 여러 번 저장할 이유가 없다. 이 같은 특성 때문에 중복을 배제한 자료를 구현할 때 상당히 유용하다. 대표적인 구현 클래스로는 HashSet, TreeSet이 있다.

 

TreeSet은 기본적으로 오름차순 집합으로 정렬되어 저장되며, 내림차순으로 정렬하기 위해서는 객체 생성 시 매개변수로 Collections.reverseOrder()를 삽입해 주면 된다.

 

List의 method에서 index 관련한 method가 전부 빠지고, 이를 보완하는 method인 iterator가 추가됐다. set과 iterator는 객체를 참조하는 변수명이므로, 작명에 따라 변동된다.

 

 

  method 실행내용
추가 add(저장값) 저장값 추가
삭제 remove(저장값) 저장값 삭제
clear() 모두 삭제
검색 Set.iterator() Iterator <타입> iterator = set.iterator(); 형태로 선언 iterator.hasNext() 남은 저장값 있는지 확인
iterator.next() 저장값 하나 가져 옴
iterator.remove() next()가 가져 온 저장값 삭제
contains(저장값) 저장값이 있는지 확인
isEmpty() 비어 있는지 확인
size()  Set 크기 확인

 

 

Map

 

 

Map은 index를 지정해서 저장하는 방식이다. Map에서 index는 key라고 한다. index와 달리 번호가 아닌 형식으로도 지정할 수 있다. 대표적인 구현 클래스로는 HashMap, Hashtable, TreeMap, Properties가 있다.

 

Set 타입으로 치환하여 key와 저장값을 분리하거나 Set 인터페이스의 method를 사용할 수 있다.

 

 

  method 실행내용
추가 put(key, 저장값) key, 저장값 추가
삭제 remove(key) key, 저장값 삭제
clear() 모두 삭제
검색 Map.keySet() Set<key 타입> keySet = map.keySet(); 형태로 선언 모든 key를 Set 타입으로 치환(분리) => Set의 메소드 사용 가능
Map.values() Collection<저장값 타입> values = map.values(); 형태로 선언 모든 저장값을 Collection 타입으로 치환(분리) => Set의 메소드 사용 가능
Map.entrySet() Set<Map.Entry<key 타입, 저장값 타입>> entrySet = map.entrySet(); 형태로 선언(Entry 타입) 모든 key, 저장값을 Set 타입으로 치환 => iterator 메소드 사용 가능
get(key) key의 저장값 불러오기
getOrDefault(key, 기본값) 해당 키가 존재하지 않으면 기본값을 불러오며, 존재하면 key의 저장값 불러오기(put과 조합해 각 key의 개수 count 시 유용)
containsKey(key) key가 있는지 확인
containsValue(저장값) 저장값이 있는지 확인
isEmpty() 비어 있는지 확인
size() Map 크기 확인

 

 

(시간이 된다면) 다음 글에서는 각 interface 구현 클래스들의 차이에 대해 포스팅할 예정이다.