■ HashMap

1. 정의

  • HashMap은 key와 value 값으로 구성된다
    - HashMap(key, value)
    - key 값은 중복되면 않된다
    - value 값은 중복될 수 있다 
  • HashMap = Hash Table 에 저장 = 배열(Array) + 링크드리스트(LinkedList) 로 구성된다
  • HashMap은 순서를 유지하지 않아도 된다
     - 순서를 유지하고 싶다면 LikedHashMap을 사용하면 된다
  • HashMap은 Hashing 기법으로 만들어진다
HashMap map = new HasgMap();
map.put("key", "value");  //저장하기 위한 명령어로 put를 사용한다
  • key와 value 값 한쌍을 Entry라고 한다

2. Hashing

  • hash function은 key값을 받아서 해당되는 index 값(저장위치)을 반환하는 함수이다
  • 반환되는 index 값을 hash code라고 한다
  • hash 함수를 이용하여 hash 테이블에 데이터를 저장하고 반환하는 작업을 hashing이라고 한다
    - key값이 같으면 항상 같은 값을 반환한다
    - key값이 달라도 같은 값을 반환할 수 있다
  • hash table은 배열과 링크드 리스트의 조합이다
    - 배열의 접근성과 링크드리스트의 변경 용이성을 모두 가지고 있다

3. HashMap 메서드

 1) HashMap

  • HashMap()
  • HashMap(int initialCapacity)
  • HashMap(int initialCapacity, float loadFactor)
  • HashMap(Map m)

 

 2) Object Method

  • Object put(Object key, Object value)
    - 데이터를 저장할 때 사용한다
    - key와 value를 묶어서 저장한다(key=value)
  • void putAll(Map m)
    - 지정한 Map m의 값을 모두 저장할 때 사용한다
  • Object remove(Object key)
    - key 데이터를 삭제할 때 사용한다
  • Object replace(Object key, object value)
    - 지정한 key의 value를 변경할 때 사용한다
  • boolean replace(Object key, Object oldValue, Object newValue)
    - 지정한 key에 해당되는 value를 변경할 때 사용한다

 3) HashMap에 저장된 데이터를 읽어오는 Method

  • Set entrySet()
    - key와 value 쌍으로 구성된 데이터를 호출한다
  • Set keySet()
    - key 데이터만 호출한다
  • Collection value()
    - value 데이터만 호출한다

 4) HashMap에 저장된 데이터를 조회하는 Method

  • Object get(Object key)
    - 지정한 key에 해당하는 value를 반환한다
  • Object getOrDefault(Object key, Object defaultValue)
    - 주어진 key가 데이터에 없을 경우, 지정한 defaultValue 데이터를 반환한다
  • boolean containsKey(object key)
    - 주어진 key가 key 데이터에 있는지 여부를 확인한다
    - true / false 로 반환한다
  • boolean containsValue(Object vaalue)
    - 주어진 value가 value 데이터에 있는지 여부를 확인한다
    - true / false 로 반환한다

 5) 정량적 Method

  • int size()
    - 데이터의 크기를 확인한다
    boolean isEmpty()
    - 데이터가 비었는지 확인한다
  • void clear()
    - 데이터를 삭제한다
  • Object clone()
    - 데이터를 복제한다

 

4. 예제

import java.util.HashMap;
import java.util.Scanner;

public class HashMap_IdPw {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("Id1", "1111");
        map.put("Id2", "2222");
        map.put("Id3", "3333");
//        System.out.println(map);

        Scanner scanner = new Scanner(System.in);

        while (true) {  //반복문을 실행
            System.out.println("Id와 Pw를 입력하세요");
            System.out.println("Id : ");
            String id = scanner.nextLine().trim();  //trim 은 앞 뒤 공백을 없애준다
            System.out.println("Pw : ");
            String pw = scanner.nextLine().trim();

            System.out.println();  //줄바꿈 역활

            if (!map.containsKey(id)) {  //containsKey는 key 값 전체를 가리킨다
                System.out.println("일치하는 id가 없습니다" + "\n" + "다시 입력해 주시기 바랍니다");
                continue;  //다음 반복 while 문으로 이동
            }

            if (!map.get(id).equals(pw)) {  //get(id)는 key 값 중에 id와 일치하는 값이 있으면  value 값을 반환한다
                System.out.println("비밀번호가 일치하지 않습니다" + "\n" + "다시 입력해 주시기 바랍니다");
            } else {  //id와 pw가 일치하면 문장 출력 후 반복문 털출
                System.out.println("id와 비밀번호가 일치합니다");
                break;
            }
        }
    }
}
import java.util.*;

public class HashMap_SumAverage {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("kim", 90);
        map.put("lee", 50);
        map.put("cha", 80);
        map.put("park", 100);
        map.put("choi", 70);
//        System.out.println(map);

        //전체 map에 저장된 데이터에서 값을 호출,조회하는 코드

        Set set = map.entrySet();  //map에 저장된 데이터를 key,value 쌍으로 호출한다
        Iterator iter = set.iterator();  //set에 데이터가 남아 있는지 확인한다

        while(iter.hasNext()) {
            Map.Entry me = (Map.Entry)iter.next();  //Map 인터페이스 안의 Entry 인터페이스
            System.out.println("이름 : " + me.getKey() + ", 점수 : " + me.getValue());
        }

        //전체 map에서 key 데이터만을 호출하는 코드
        set = map.keySet();  //key에 저장된 값만 가져온다
        System.out.println("참가자 명단 : " + set);

        //전체 map에서 value 데이터만을 호출하는 코드
        Collection values = map.values();  //value 데이터를 가져온다
        iter = values.iterator();

        int total = 0;

        while(iter.hasNext()) {  //hasNext()는 읽어 올 요소가 남았는지 확인한다
            int i = (int)iter.next();  //next() 메소드는 읽어 올 요소가 남았는지 확인한다
            total = total +i;
        }

        System.out.println("총점 : " + total);
        System.out.println("평균 : " + (float)total/set.size());  //정수로 결과값이 나오므로 float로 형변환 해 준다
        System.out.println("최고점수 : "+ Collections.max(values));
        System.out.println("최저점수 : "+ Collections.min(values));
   }
}

 

 

 

'JAVA' 카테고리의 다른 글

Java - HashMap 활용 - 합계, 평균  (0) 2022.09.14
Java - 문자열 바꾸기 - replace  (0) 2022.09.13
Java - Static  (0) 2022.08.14
Java - 문자열 입력(Scanner, BufferReader)  (0) 2022.08.08
Java - 날짜(Date), 시간(Time)  (0) 2022.08.08

+ Recent posts