본문 바로가기
Java, JSP

[Java/자바] 해시맵, HashMap 사용법과 EntrySet, Iterator

by LasBe 2022. 1. 11.
반응형

⚡️ 해시맵(HashMap)


해시맵은 자바의 JCF(Java Collections Framework),

자바 컬렉션 프래임워크 중 일부로 Map 인터페이스의 구현 클래스 중 하나입니다.

 

Map 인터페이스를 상속하고 있기 때문에 <key, value> 객체로 구성된 자료구조의 특성을 그대로 지니고 있습니다.

 

<키, 값>에서 는 중복 저장이 불가능하며,  은 중복 저장이 가능합니다.

 

만약 이미 존재하는 키로 값을 저장하게 된다면 기존의 값에서 새로운 값으로 대체됩니다.

 

그럼 아래의 순서대로 해시맵의 사용법을 알아보겠습니다.

  1. HashMap 선언
  2. HashMap 데이터 추가
  3. HashMap 데이터 삭제
  4. HashMap 데이터 추출, 출력
  5. EntrySet() 사용법
  6. Iterator 사용법

📌 HashMap 선언

HashMap<Integer, String> map = new HashMap<Integer, String>();

HashMap<Integer, String> map2 = new HashMap<Integer, String>(){ //초기값 삽입도 가능합니다.
	{ put(1,"a"); put(2,"b"); }
}

해시맵 생성 시 제네릭 형태로 다이아몬드 연산자(<>) 내부에 키와 값 타입을 파라미터로 부여하고 기본 생성자를 호출할 수 있습니다.

 

생성자에서 키와 값의 타입은 생략 가능하며 초기 값을 부여하는 것도 가능합니다.


📌 HashMap 데이터 추가

HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(1, "b"); // 키 값이 중복되면 교체
map.put(2, "c");
map.put(3, "c");

System.out.println("map : " + map);

map 출력

해시맵에 값을 추가하기 위해서는 .put(key, value) 메소드를 이용합니다.

 

메소드 사용 시 객체의 키-값의 타입에 맞춰서 데이터를 넣어줍니다.

 

value가 중복되면 문제없이 잘 저장되지만 key가 중복되면 마지막에 입력된 데이터가 최종적으로 저장됩니다.


📌 HashMap 데이터 삭제

map.remove(1); // key(1)의 데이터 삭제
map.clear(); // 모든 데이터 삭제

.remove(key) 메소드로 키를 파라미터로 넣어 데이터를 삭제합니다.

.clear() 메소드는 해시 맵의 모든 데이터를 삭제합니다.


📌 HashMap 데이터 추출, 출력

System.out.println("map : "+map); // 해시맵 전체
System.out.println("map's key : "+map.keySet()); // 모든 key
System.out.println("key가 1인 value : "+map.get(1)); // Key에 해당하는 Value값을 리턴
System.out.println("map's value : "+map.values()); // 모든 value

for(int key : map.keySet()) {
	System.out.println("key : "+key+" / value : "+map.get(key));

결과 출력

해시맵 객체를 그대로 출력하게 되면 {key=value, ......} 형식으로 모든 키, 값이 출력된다.

 

모든 키를 반환받으려면. keySet() 메소드를, 모든 값을 반환받으려면. values() 메소드를 사용하면 된다.

 

.get(key) 메소드는 특정 키에 대한 값을 반환한다.

 

아래에서는 entrySet()과 Interator를 사용해 출력하는 방법을 알아보겠습니다.


⚡️ entrySet()


entrySet()메소드는 HashMap에 저장된 키-값의 데이터를 결합된 형태로 Set에 저장하여 반환해줍니다.

 

많은 양의 데이터를 가져올 때 keySet() 메소드를 이용해 모든 key를 불러온 뒤 하나하나 value를 찾는 과정은

많은 시간과 자원이 소모됩니다.

 

그에 비해 entrySet()을 이용하는 것은 키-값이 묶인 데이터를 가져오기 때문에 더 좋은 성능을 보여줍니다.

Set<Entry<Integer, String>> entrySet = map.entrySet();

for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("key : " + entry.getKey() + " / value:" + entry.getValue());
}

 

 

⚡️ Iterator


Iterator는 자바의 Collections Framework에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것입니다.

 

반복자라는 단어의 뜻에 맞게 배열이나 그와 유사한 자료구조의 내부 요소를 순회하는 객체입니다.

 

주요 메소드는 다음과 같습니다.

hasNext() 읽어올 요소가 있으면 true, 없으면 false 리턴
next() 다음 데이터를 리턴
remove() next()로 리턴받은 요소를 삭제

 

그럼 예제를 통해 사용법을 알아보겠습니다.

Iterator<Entry<Integer, String>> it = map.entrySet().iterator();

while(it.hasNext()) {
	Entry<Integer, String> entry = it.next();
	System.out.print("key-value : "+entry+" / ");
	System.out.println("key : "+entry.getKey()+" / value : "+entry.getValue());
}

Entry의 메소드에 Iterator로 변환해주는 .entrySet().iterator() 메소드를 통해 객체를 변환해줍니다.

 

그다음 반복문을 통해 key-value 값을 가져올 수도 있고 요소들을 따로따로 가져오는 것도 가능합니다.

 

 

더보기

자바 해시맵, hashmap 사용법, 자바 entry 사용법, JCF, Java Collections Framework, 자바 컬렉션 프래임워크, iterator 사용법, entrySet 사용법, hashmap 추출

 

반응형

댓글


오픈 채팅