Back-End/JAVA

[Java] HashMap

챌링킴 2021. 6. 1. 20:37
반응형

1) HashMap

Map구조는 Key와 Value가 쌍으로 저장되는 형태이다.

 

2) Key / Value

Key(중복불가능) Value(중복가능)
fly 날다
walk 걷다
run 뛰다

Key와 Value가 한 쌍(Entry)으로 저장된다.

그러므로 검색에 용이하다.

 

Key는 Set타입이고 Value는 Collection 타입이다.

키 ⇔ 해쉬테이블 ⇔ 값

import java.util.HashMap;

public class HMapTest {
	public static void main(String[] args) {
		HashMap<String, String> map1 = new HashMap<>();

		// HashMap에 요소 추가하기
		map1.put("fly", "날다");
		map1.put("walk", "걷다");
		map1.put("run", "뛰다");

		// HashMap의 구조 파악하기
		System.out.println(map1);

		// HashMap의 요소 수정하기
		map1.put("run", "달리다"); // 존재하는 키 값에 Value를 또 넣으면 그게 수정
		System.out.println(map1);

		// HashMap에서 요소 개수
		System.out.println(map1.size()); // key와 value는 entry로 봄

		// HashMap에서 요소 가져오기
//		System.out.println(map1.get("fly"));
//		System.out.println(map1.get("run"));
//		System.out.println(map1.get("walk"));
		
		

		// HashMap에서 요소 삭제하기
		System.out.println(map1.remove("fly")); // 지워주면서 value 리턴해줌
		System.out.println(map1);

	}
}

 

3)

Map 자료구조는 순서를 따지지 않기때문에 Set으로 묶은 후, Iterator를 통해 순서를 부여받아서 사용해야 한다.

 

4)

.keySet( ) : 키들만 모여있는 Set

.values( ) : 값들만 모여있는 Collection

.entrySet( ) : 키, 값이 하나의 Entry로 모여있는 Set

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class HMapTest2 {
	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		map.put(1, "하나");
		map.put(2, "둘");
		map.put(3, "셋");
		map.put(4, "넷");
		map.put(5, "다섯");
		// System.out.println(map);

		// keySet
		Set<Integer> keyset = map.keySet();
		Iterator<Integer> keyiter = keyset.iterator();
		while (keyiter.hasNext()) {
			System.out.println(keyiter.next());
		}

		// values
		Collection<String> values = map.values(); //get(i)메소드는 List에 구현되어 있는 메소드이고 Collection에는 존재하지 않는다.
		Iterator<String> valueiter = values.iterator();
		while (valueiter.hasNext()) {
			System.out.println(valueiter.next());
		}
		
		//entrySet
		Set<Entry<Integer, String>> entryset = map.entrySet();
		Iterator<Entry<Integer, String>> entryiter = entryset.iterator();
		while(entryiter.hasNext()) {
			Entry<Integer, String> entry = entryiter.next();
			System.out.println("키 : "+entry.getKey());
			System.out.println("값 : "+entry.getValue());
		}
	}
}

 

5) 컬렉션 사용시 주의할 점

컬렉션에서는 값들을 비교할 때 요소 타입의 equals( )나 hashCode( )로 비교하기 때문에

우리가 만든 클래스에 equals( )를 재정의하지 않는다면,

주소값에 관련된 비교를 하기때문에 같은 값을 찾아올 수 없다.

 

따라서 비교하고자 하는 요소를 올바르게 비교하도록 equals( )와 hashCode( )를 재정의해서 사용해야 한다.

 

반응형

'Back-End > JAVA' 카테고리의 다른 글

[Java] Thread(쓰레드)  (0) 2021.06.01
[Java] 빠른 for문  (0) 2021.06.01
[Java] HashSet  (0) 2021.06.01
[Java] ArrayList  (0) 2021.06.01
[Java] 컬렉션 프레임워크(Collection Framework)  (0) 2021.05.31