[혼자 공부하는 자바] 8/9 13-1 [Map 컬렉션] [Map인터페이스] [HashMap] [Hashtable]

2020. 8. 9. 22:42·JAVA


어디 갔다가 어제 집에 돌아와서 며칠간 학습을 못했다 오늘 화이팅해야한다 ^o^

 

Map컬렉션 (HashMap, HashTable, LinkedHashMap, Properties, TreeMap ...)

구조: 키와 값으로 구성된 Map.Entry 객체를 저장하는 구조

Entry: Map인터페이스 내부에 선언된 중첩인터페이스. 여기서 키, 값은 객체다.

 

 

 

 

 

<<Map컬렉션의 구조>>

Entry객체는 키,값 쌍으로 구성된다.

 

 

<<Map컬렉션에서 공통적으로 사용 가능한 Map인터페이스의 메소드>>

기능 메소드 설명
객체 추가 V put(K key, V value) 주어진 키로 값을 저장
ㅇ새로운 키일 경우 : null 리턴
ㅇ동일키가 있을 경우 : 값 대체하고 '이전 값'을 리턴  
객체 검색 boolean containsKey(Object key) 키 존재여부 확인
boolean containsValue(Object value) 값 존재여부 확인
Set<Map.Entry<K,V>> entrySet() 모든 Map.Entry객체를 Set에 담아 리턴
V get(Object key) 그 키의 값을 리턴
boolean isEmpty() 컬렉션이 비어있는지 여부 확인
Set<K> keySet() 모든키를 Set객체에 담아서 리턴
int size() 저장된 키의 총 수 리턴
Collection<V> values() 모든 값을 Collection에 담아 리턴
객체 삭제 void clear() 모든 Map.Entry삭제 (키와 값)
V remove(Object key) 이 키와 일치하는 Map.Entry삭제하고 값을 리턴

 

타입 파라미터 K, V => 키, 값으로 저장되는 객체 타입을 Map컬렉션 생성시 결정하게 된다.

예)

두번째 매개값은 30이 포장된Integer객체가 된다. (자동 박싱)


저장된 전체 객체 정보를 하나씩 얻는 방법 ㅡ 두 가지 방법

1.keySet() 메소드로 모든 키를 Set컬렉션으로 얻기 -> 반복자로 하나씩 얻는 키를 통해 값 얻기

2.entrySet() 메소드로 모든 Map.Entry(키와 값)을 Set컬렉션으로 얻기 -> 반복자로 Map.Entry를 하나씩 얻고 getKey()와 getValue() 메소드를 이용해 키, 값 얻기

 

 

 

 


이제는 Map 컬렉션의 

HashMap, Hashtable을 공부해보자

 


HashMap

●HashMap 생성하기

Map<K, V> map = new HashMap<K, V>();

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

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

 

키, 값 타입은 기본타입 사용 못한다 -> 클래스, 인터페이스 타입만 사용 가능.

 

 

 

●HashMap - 동등객체 판단 관련

ㅇHashMap의 키로 사용할 객체 -> hashCode()와 equals() 메소드를 재정의해서 '동등객체가 될 조건'을 필요에 맞게 정해야 한다.

(이전에 학습한 내용 기억하기! 필드값이 같으면 동등객체라고 판단하게 하기 위해서 equals를 재정의했었고, 객체의 해시코드가 아닌 해당 필드의 해시코드를 리턴하게 재정의 했었다.)

 

HashMap의 키 : 여기서 키로 사용할 객체로서 '동등객체'라면 -> 서로 다른 객체더라도 같은 해시코드를 리턴해야 한다.

즉, 동등객체의 조건에 따라 hashCode() 리턴값이 같게, equals()가 true를 리턴하도록 하여 '동등객체'라고 재정의해야 한다.

=>키 타입으로 String을 많이 사용한다 : Stirng은 이미 문자열이 같을 경우 동등객체가 되도록 hashCode()와 equals() 메소드가 재정의되어있다. 

 

 

 

●예제 : 이름을 키로, 점수를 값으로 저장 ㅡ HashMap 사용

 

더보기

참고)

 

 Map.Entry인터페이스는 static이다.

 

 

●예제2 : 사용자정의 Student객체를 키로, 점수를 값으로 저장하는 HashMap 사용 방법

ㄴStudent를 정의할 때, 동등객체를 처리하기 위해 equals()와 HashMap() 메소드를 재정의해야 한다.

ㄴ꼭@@ 키로 사용할 객체 내용을 직접 작성해야 할 때, 키의 동등객체 처리를 잊지 말자!!

 

사용자정의 객체를 Map컬렉션의 키로 사용할 때 

동등객체 인식 처리를 위해 두 메소드를 재정의하는 것 기억하기!


Hashtable

ㄴHashMap과 동일한 내부구조 (마찬가지로 equals와 hashCode()의 재정의를 통해 동등객체 조건을 정해야 함)

 

HashMap과의 차이점: "동기화된 메소드로 구성되어 있다"

 

->저번에 List컬렉션에서 공부했던 내용과 비슷한 맥락이다.

ArrayList와 동일한 내부구조인 Vector클래스에서 둘의 차이점은 동기화메소드로 구성되어있는지 여부의 차이이다.

cf)멀티스레드

 

Hashtable

ㄴsynchronized메소드로 구성되어 있어서 멀티스레드가 동시에 해당 메소드 이용을 못 한다.

하나의 스레드가 실행을 완료해야 한다.

=>멀티스레드 환경에서 안전하게 객체를 다룰 수 있음 => Hashtable은 스레드에 안전함 (thread safe)

 

생성 방법은 HashMap생성법과 다르지 않다.

Map<K, V> map = new Hashtable<K, V>();

 

 

●예제 : 

키보드로 아이디, 비밀번호 입력받아서 Hashtable의 키,값과 비교한 후 로그인 여부 출력하기

 

 


확인문제 09

 

몇일 뒤에 이 확인문제를 혼자 풀어보면서 복습이 많이 되었다

 

entrySet 개념이 희미해질 뻔 했는데 다행히 다시 잡았다. 메모해둬야겠다

 

아무튼 나는 먼저 이렇게 작성을 했다.

 

 

답지를 확인해보자. 답지는 Iterator를 안 쓰나..!!

어떻게 안 쓸 수 있을까??

 

>>향상된 for문을 사용해서 entrySet을 변수에 담아 하나씩 비교!!

아 ㅠㅠ 객체를 하나씩 처리하는 방법으로 두 가지를 배웠었지

1. Iterator

2. 향상된 for문

 

힌트를 얻었으니까 향상된 for문으로 다시 작성을 해보자

더보기

저 노란 부분을 향상된 for문으로!

이 부분만 Iterator사용하는 것 대신 향상된 for문을 사용해봤다!! 이렇게 바꿔 작성해줄 수도 있다.

'JAVA' 카테고리의 다른 글

[혼자 공부하는 자바] 8/13 13-2 [컬렉션프레임워크] [LIFO(후입선출)/Stack클래스] [FIFO(선입선출)/Queue인터페이스]  (0) 2020.08.13
[5주차] 기본미션 + 선택미션 [혼공단] [혼공자]  (0) 2020.08.09
[4주차] 기본미션 + 선택미션 [혼공단] [혼공자]  (0) 2020.08.02
[혼자 공부하는 자바] 8/1 13-1 [Set 컬렉션] [Set 인터페이스] [HashSet]  (0) 2020.08.02
[혼자 공부하는 자바] 7/31 13-1 [List 컬렉션] [ArrayList] [Vector] [LinkedList]  (0) 2020.07.31
'JAVA' 카테고리의 다른 글
  • [혼자 공부하는 자바] 8/13 13-2 [컬렉션프레임워크] [LIFO(후입선출)/Stack클래스] [FIFO(선입선출)/Queue인터페이스]
  • [5주차] 기본미션 + 선택미션 [혼공단] [혼공자]
  • [4주차] 기본미션 + 선택미션 [혼공단] [혼공자]
  • [혼자 공부하는 자바] 8/1 13-1 [Set 컬렉션] [Set 인터페이스] [HashSet]
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (389)
      • 미분류글 (32)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
[혼자 공부하는 자바] 8/9 13-1 [Map 컬렉션] [Map인터페이스] [HashMap] [Hashtable]
상단으로

티스토리툴바