■ 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 |