HashMap은 기본적으로 Map인터페이스에 속해 있는 컬렉션이라고 볼 수 있습니다.
즉 Map 인터페이스의 기본 기능들을 포함하고 있으며, 모든 map형태의 데이터는 Key , Value로 이뤄지고 있습니다.
그렇다면 모든 데이터가 Key,Value로 이루어지고 있다는것은 하나의 Key값 당 하나의 Value만을 담고 있다는 의미인데. 자세한 그림으로 설명을 하자면 아래 그림과 같은 형태를 띄게 됍니다.
즉 위 그림으로 설명을 드리자면 하나의 key1 - key5 까지 하나의 각각 value1 - value5까지 하나씩 매핑이 되어있다고 보시면 편하실거 같습니다.
그렇다면 하나의 고유의 Key값당 값이 설정이 되어있다는 의미인데 그렇다면 중복 또한 이러한 Map에 형태의 맞게 중복이 불가능하다고 보면 된다. 즉 Key값은 중복이 불가능하고 Value는 언제든지 변경이 가능한 유동성이 있는 값이다.
여기서 그외 유사한 클래스로 HashTable이 있다. 여기서는 간단히만 알아보고자 한다.
HashTable은 key에 null을 허용하지 않지만 HashMap은 key에 null을 허용합니다.
HashTable은 멀티스레드 환경에서 값의 무결성을 보장할 수 있지만, 이는 당연히 병목현상이 발생할 수 있다. 그렇기에 다중 환경이 아니라면 HashMap이 더 좋은 성능을 가지고 있다.
기본적으로 Key Value의 쌍으로 값을 넣는 방식
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.put(i, i + 1);
}
위와 같은 방식으로 for문으로 값을 넣었다고 했을 때 1,2,3,4,5,6,7,8,9,10이라는 데이터가 들어가 있을 것이다.
그렇다면 바로 Get 메소드를 통해서 Key 값에 해당하는 value를 가져올 수 있다.
for (int i = 0; i < 10; i++) {
System.out.print(map.get(i) + " ");
}
아래와 같은 출력 결과를 가져올 수 있다.
그렇다면 Map에서는 Key값들만 순서대로 , Values값들만 순서대로 가져올 수 있다.
for (int num : map.keySet()) {
System.out.print("key : " + num + " ");
}
for (int num : map.values()) {
System.out.print("value : " + num + " ");
}
고유특성은 위에서 말했듯이 Key는 고유한 값이기에 변경이 불가능하다. 즉 중복이 불가능하다. 하지만 Value는 언제든지 Key값에 일치하기만 한다면 value는 언제든지 수정이 가능하다.
for (int i = 0; i < 10; i++) {
map.put(i, i + 10);
}
System.out.println();
for (int i = 0; i < 10; i++) {
System.out.print(map.get(i) + " ");
}
위의 1 - 10 까지의 데이터를 각각 10씩 더해서 출력을 해보자.
제대로 10씩 더해서 값들이 수정이 되고 있다.
이상으로 Map에 대한 노트를 간단히 마치기로 하겠다.