본문 바로가기

개발일지/Java + Spring

[Java] HashMap, HashTable

 

참고 영상

 

· HashMap, HashTable

- Map 인터페이스를 구현.

- 데이터를 키와 쌍으로 저장(key, value)

- set 처럼 저장 순서를 유지하지 않음

- key 중복 X / value 중복 O (ex.id와 password)

 

· HashTable은 구버전, HashMap은 신버전

- HashTable 동기화 O, HashMap 동기화 X 

 

· Map은 원래 순서 유지를 하지 않지만, 순서 유지를 해야 할 경우가 있다면?

LinkedHashMap을 사용


HashMap

- 해싱(Hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.

- Map 인터페이스를 구현해서 데이터를 키와 값의 쌍으로 저장

- 키(Key) 중복 X / 값(Value) 중복 O

 

HashMap map = new HashMap();

//순서 없음
map.put("myId", "1234");
map.put("asdf", "1111");
System.out.println(map);

//키 값이 같아도 에러 발생하지 않고, 값이 다른 경우 마지막 값으로 변경 됨
map.put("asdf", "1234");
System.out.println(map);

 

===== 출력 =====

{myId=1234, asdf=1111}
{myId=1234, asdf=1234}

 

 

HashMap 클래스를 보면 안에 Entry[] table 배열이 있다. 

이곳에 Key와 Value가 저장된다.

키와 밸류값 한 쌍이 이곳에서 말 하는 엔트리이다 !

 

 

HashMap map = new HashMap();
		
map.put("myId", "1234");
map.put("asdf", "1111");
map.put("asdf", "1234");

Scanner sc = new Scanner(System.in);

while(true) {
    System.out.println("id와 password를 입력해주세요.");
    System.out.print("id : ");
    String id = sc.nextLine().trim(); // trim은 앞뒤 공백을 없애 사용자 편의를 봐줌

    if(!map.containsKey(id)) { // 컨테인즈키 입력한 아이디 비교
        System.out.println("입력한 id는 존재하지 않습니다.\n");
        continue; // 다음 반복으로 다시 넘어감
    }

    System.out.print("password : ");
    String password = sc.nextLine().trim();

    if(!(map.get(id)).equals(password)) { // ("1234")로 반환 이퀄스로 비교
        System.out.println("비밀번호가 일치하지 않습니다.\n");
    } else { // 둘 다 일치할 경우 반복문을 빠져나옴
        System.out.println("id와 비밀번호가 일치합니다.");
        break;
    }
}	// while

 

===== 출력 =====

id와 password를 입력해주세요.
id : asd
입력한 id는 존재하지 않습니다.

id와 password를 입력해주세요.
id : asdf
password : 123
비밀번호가 일치하지 않습니다.

id와 password를 입력해주세요.
id : asdf
password : 1234
id와 비밀번호가 일치합니다.