개발일지/Java + Spring
[Java] HashMap, HashTable
연습용365
2022. 2. 28. 16:51
· 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와 비밀번호가 일치합니다.