본문 바로가기
Algorithm/이론

Set<E> vs Map<K,V>

코동이 2020. 7. 10.

Set<E>은 중복을 허용하지 않고 Null값은 1개를 허용하고 순서를 보장하지 않는다.

 

Map<K,V>은 key 중복은 허용하지 않고 value중복은 허용하며 Null값은 key값의 경우 1개, value의 경우 여러개를 허용하고 마찬가지로 순서를 보장하지 않는다. 

 

*Set

타입 메소드 설명
boolean add(E e) 데이터를 set에 추가한다.
boolean contains(Object o) 데이터가 있는지 확인한다.
boolean remove(Object o) 데이터를 제거한다.
ex) HashSet, LinkedHashSet, TreeSet, SortedSet
import java.io.*;
import java.util.*;
import java.util.Map.Entry;

public class Main {

	public static void main(String[] args) throws IOException {
		Set<String> set = new HashSet<>();
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("a");
		System.out.println(set.size()); // 3
		for(String res : set) {
			System.out.println(res); // a, b, c
		}
        
        List<String> list = new LinkedList<>(set);
	}
}

 

Set은 중복 없이 데이터들을 담아서 사용할 수 있다. add, remove를 통해 추가 삭제를 할 수 있으며 set형태를 list로 바꿀 때는 매개변수에 넣는다. 정렬을 할 때 유용하다.

 

*Map

타입 메소드 설명
V put(K key, V value) key와 value를 map에 추가한다.
V remove(Object key) key값으로 map 데이터를 삭제한다.
boolean containsKey(Objcet key) key값이 존재하는지 검사한다.
boolean containsValue(Object value) value값이 존재하는지 검사한다.
V get(Object key) key값으로 value를 반환한다.
Set<K> keySet() key값들을 set으로 반환한다.
Set<Map.Entry<K,V>> entrySet() map의 값들을 Map.Entry로 반환한다.
Collections<V> values() value값들을 Collection으로 반환한다.
default V replace(K key, V value) key값에 따른 value값을 변경한다.
ex) HashMap , LinkedHashMap, TreeMap, WeakHashMap, IdentityHashMap

 

*Map.Entry

타입 메소드 설명
Object getKey() Entry의 key를 반환한다.
Object getValue() Entry의 value를 반환한다.
import java.io.*;
import java.util.*;
import java.util.Map.Entry;

public class Main {

	public static void main(String[] args) throws IOException {
		Map<Integer, String> map = new HashMap<>();
		map.put(0, "apple");
		map.put(1, "banana");
		map.put(2, "coke");
		map.put(3, "drum");
		map.put(4, "eureka");
		
		//key값 추출하기
		for (int intValue : map.keySet()) {
			System.out.println(intValue);
		}

		//value 값 추출하기
		for (String str : map.values()) {
			System.out.println(str);
		}
		
		//key, value값 추출하기
		for (Map.Entry<Integer, String> m : map.entrySet()) {
			System.out.println(m.getKey() +" "+m.getValue());
		}
		
		//key, value값 존재 검사
		System.out.println(map.containsKey(2));
		System.out.println(map.containsValue("coke"));
		
		//key값들을 list로 변환
		List<Integer> list1 = new LinkedList<>(map.keySet());
		
		//value값들을 list로 변환
		List<String> list2 = new LinkedList<>(map.values());
	}
}

  key, value 1쌍을 가지고 작업을 수행할 때 이용한다. key,value에 따라 다양한 검사가 가능하다. key값만 추출할수도, value값만 추출할 수도, key, value를 한쌍씩 추출할 수도 있다. 특히 key, value를 1쌍으로 추출할 때 Map.Entry를 사용하며 getKey() getValue()를 통해 확인 가능하다. set처럼 map의 key, value 요소를 각각 list형으로 바꿀 수 있다.

 

 

  Collection 인터페이스는 컬렉션 클래스에 저장된 데이터를 읽고, 추가하고 삭제하는 등 컬렉션을 다루는데 가장 기본적인 메서드들을 정의한다. add(), isEmpty(), remove(), size() 등이 기본적으로 정의되어 있다. 인터페이스 List와 Set을 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어서 공통된 부분을 다시 뽑아 Collection 인터페이스를 정의하였고 Map 인터페이스는 이들과 전혀 다른 Collection을 다루기 때문에 상속 계층도에 포함시키지 않는다.

 

*시간복잡도

  add contains next note
HashSet O(1) O(1) O(h/n) h is the table capacity
LinkedHashSet O(1) O(1) O(1)  
TreeSet O(log n) O(log n) O(log n)  
HashMap O(1) O(1) O(h/n) h is the table capacity
LinkedHashMap O(1) O(1) O(1)  
TreeMap O(log n) O(log n) O(log n)  

 

반응형

'Algorithm > 이론' 카테고리의 다른 글

다익스트라(dijkstra)  (0) 2020.07.13
PriorityQueue / Deque  (0) 2020.07.10
BufferedReader  (0) 2020.07.06
Comparable & Comparator  (0) 2020.07.06
투 포인터(Two Pointer)  (0) 2020.07.05