해싱(Hashing)된 맵(Map)
-> 해싱 : 해시 함수에 문자열 입력값을 넣어서 특정한 값으로 추출하는 것
-> 맵 : 키(Key) 와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조.
키는 맵에 오직 유일하게 있어야함 ,값은 중복가능
키와 값을 매핑하기 위해 해시라는 것을 사용한다.
HashTable과 달리 보조 해시 함수를 사용하기 때문에, 보조 해시 함수를 사용하지 않는 HashTable에 비하여 해시 충돌이 덜 발생할 수 있어 상대적으로 성능상 이점이 있다.
HashMap과 사용법이 거의 동일한 컬렉션(Collection)에는 Hashtable이 있습니다.
자신이 만든 객체도 키로 사용할 수 있다.
HashMap과 Map은 java.util 안에 위치
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] ar) {
Map<String,Integer> map=new HashMap(); //<키 자료형, 값 자료형>
map.put("A", 100);
map.put("B", 101);
map.put("C", 102);
map.put("C", 103); //중복된 key가 들어갈때는 이전 키,값을 지금의 것으로 업데이트
System.out.println(map);
System.out.println(map.get("A"));
System.out.println(map.get("B"));
System.out.println(map.get("C"));
}
}
결과
{A=100, B=101, C=103}
100
101
103
containsValue
: 값이 존재하는지 알아보는 메소드 public static void main(String[] ar){
Map<String,Integer> map=new HashMap();
map.put("key1", 100);
map.put("key2", 200);
if(!map.containsKey("key2")) //키가 들어있는지 확인. 있으면 덮어쓰지 않는다.
map.put("key2", 300);
System.out.println(map);
System.out.println(map.get("key1"));
System.out.println(map.get("key2"));
}
결과
{key1=100, key2=200}
100
200
위의 if문과 put메소드를 한꺼번에 처리할 수 있는 메소드가 존재한다. putIfAbsent
두 라인을 아래와 같이 바꿔써도 같은 동작을 한다.
//if(!map.containsKey("key2")) //키가 들어있는지 확인. 있으면 덮어쓰지 않는다.
//map.put("key2", 300);
map.putIfAbsent("key2",300);
public static void main(String[] ar) {
Map<String,Integer> map1=new HashMap();
Map<String,Integer> map2=new HashMap();
//map1 put
map1.put("map1-key1", 100);
map1.put("map1-key2", 200);
//map2 put
map2.put("map2-key3", 300);
map2.put("map2-key4", 400);
System.out.println("map1:"+map1);
System.out.println("map2:"+map2);
//map2에 map1을 합침
map2.putAll(map1);
System.out.println("map2 includes map1:"+map2);
//map1의 키, 값 변경
map1.put("map1-key1", 1000);
//map2에는 영향 없음.
System.out.println("map2 includes map1:"+map2);
}
결과
map1:{map1-key1=100, map1-key2=200}
map2:{map2-key4=400, map2-key3=300}
map2 includes map1:{map2-key4=400, map1-key1=100, map1-key2=200, map2-key3=300}
map2 includes map1:{map2-key4=400, map1-key1=100, map1-key2=200, map2-key3=300}
putAll 대신 생성자를 이용해서 생성과 동시에 map의 데이터를 전부 넘겨줄 수도 있습니다.
Map<String,Integer> map2=new HashMap(map1);