[Java] Collection 정리_3

Harry park·2023년 4월 13일
0

Java

목록 보기
8/8
post-thumbnail

Map 인터페이스

MapKeyValue로 이루어져 있으며, java.util 패키지 하위의 인터페이스이다.

Map의 특징

  1. 모든 데이터는 키와 값이 존재한다.
  2. 키가 없이 값만 저장될 수는 없다.
  3. 값 없이 키만 저장할 수도 없다.
  4. 키는 해당 Map에서 고유해야만 한다.
  5. 값의 중복은 Map 인터페이스에서 상관없다. Key의 중복 허용하지 않음.
return typemethod & argsdescription
Vput(K key, V value)첫 번째 매개 변수인 키를 갖는, 두 번재 매개변수인 값을 갖는 데이터를 저장한다.
voidputAll(Map<? extends K, ? extends V m )매개 변수로 넘어온 Map의 모든 데이터를 저장한다.
Vget(Object key)매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.
Vremove(Object key)매개 변수로 넘어온 키에 해당하는 값을 넘겨주며, 해당 키와 값은 Map에서 삭제한다.
SetKeySet()키의 목록을 Set 타입으로 리턴한다.
Collectionvalues()값의 목록을 Collection 타입으로 리턴한다.
Set<Map.Entry<K,V>>entrySet()Map안에 Entry라는 타입의 Set을 리턴한다.
intsize()Map의 크기를 리턴한다.
voidclear()Map의 내용을 지운다.

📖 대표 메소드 코드 예시

public class MapTest {

	private static void makeMapData(Map<String, String> obj) {
		for(int i = 0 ; i < 10; i += 1) {
			obj.put("key"+i, String.valueOf(i*10));
		}
	}
	
	private static void printLine() {
		System.out.println("---------------------");
	}
	
	public static void main(String[] args) {
		Map<String, String> testMap = new HashMap<>();
		makeMapData(testMap);
		
		// keySet 방법 1
		for(String key : testMap.keySet()) {
			System.out.println(key + " / " + testMap.get(key));
		}
		printLine();
		
		// keySet 방법 2
		Iterator<String> vIteratorK = testMap.keySet().iterator();
		while(vIteratorK.hasNext()) {
			String key = vIteratorK.next();
			String value = testMap.get(key);
			System.out.println(key + " / " + value);
		}
		printLine();
		
		// entrySet 방법 1
		Set<Map.Entry<String, String>> vEntrySet = testMap.entrySet();
		for(Map.Entry<String, String> entry : vEntrySet) {
			System.out.println(entry.getKey() + " / " + entry.getValue());
		}
		printLine();
		
		// entrySet 방법 2
		Iterator<Map.Entry<String, String>> vIterator = testMap.entrySet().iterator();
		while(vIterator.hasNext()) {
			Map.Entry<String, String> vSet = (Map.Entry<String, String>) vIterator.next();
			String key = vSet.getKey();
			String value = vSet.getValue();
			System.out.println(key + " / " + value);
		}
		
	}
}

Map을 구현한 주요 클래스 (Java 8 Docs Map)

보편적으로 유명하고 많이 사용되는 클래스로는 HashMap, TreeMap, LinkedHashMap, Hashtable가 있다.

📖 HashMap과 Hashtable의 차이

  • MapCollcetion view를 사용하지만, HashtableEnumberation객체를 통해서 데이터를 처리한다.
  • Map은 키, 값, 키-값 쌍으로 데이터를 순환하여 처리할 수 있지만,
    Hashtable은 이 중에서 키-값 쌍으로 데이터를 순환하여 처리할 수 없다.
  • Map은 Iterator를 처리하는 도중에 데이터를 삭제하는 안전한 방법을 제공하지만, Hashtable`은 그러한 기능을 제공하지 않는다.
기능HashMapHashtable
nullableOX
Thread SafeXO

Hashtable을 제외한 Map으로 끝나는 클래스들을 멀티 쓰레드에서 동시에 접근하여 처리할 필요가 있을 때는 아래와 같이 처리하여 사용하여야 한다.

Map<Key K, Value V> m = Collections.synchronizedMap(new HashMap<>());
profile
Jr. Backend Engineer

0개의 댓글