1. HashMap
Map의 특성을 받아 (키,값)=>엔트리을 이용합니다. 추가적으로 해싱을 사용합니다.
키는 중복이 되선 아니되고 값은 중복을 허용합니다.
대량의 데이터를 검색하는데 효율적입니다.
// 비객체지향적인 코드
Object[] key;
Object[] value;
// 객체지향
Entry[] table;
class Entry {
Object key;
Object value;
}
Object 타입의 키와 값을 이용합니다. 형변환을 통해 어떠한 객체도 저장할 수 있습니다.
Key는 보통 String의 형태로 저장을 하게됩니다.
public class HashMapEx1 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("dlwjdcks", "1234");
map.put("dlwjdcks12", "1111");
map.put("dlwjdcks123", "1234");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("id와 pw를 입력해주세요");
System.out.println("id : ");
String id = scanner.nextLine().trim();
System.out.println("pw : ");
String pw = scanner.nextLine().trim();
System.out.println();
// 아이디 불일치
if (!map.containsKey(id)) {
System.out.println("입력한 id는 존재하지 않습니다. 다시 입력해주세요.");
continue;
} else {
if (!(map.get(id)).equals(pw)) {
System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
} else {
System.out.println("id와 pw가 일치합니다.");
break;
}
}
}
}
}
위 예제는 Id와 password를 HashMap에 저장을 하고 map에 대해 키가 있는지 확인하는 containsKey를 통해
존재 여부를 확인 후 키에 있는 값을 가져와서 입력한 pw와 같은지 확인합니다.
해시맵을 읽고 저장하고 읽는 연산이 있습니다.
- entrySet(): 해시맵에 저장된 엔트리를 Set에 저장하여 반환
- KeySet(): 키만 Set에 반환
- values(): 값만 컬렉션의 형태로 반환
public class HashMapEx2 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("a", new Integer(40));
map.put("b", new Integer(66));
map.put("c", new Integer(45));
map.put("d", new Integer(72));
map.put("e", new Integer(92));
map.put("f", new Integer(80));
Set set = map.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.out.println("name : " + entry.getKey() + ", score : " + entry.getValue());
}
set = map.keySet();
System.out.println("name list : " + set);
Collection values = map.values();
iterator = values.iterator();
int total = 0;
while (iterator.hasNext()) {
Integer i = (Integer) iterator.next();
total += i.intValue();
}
System.out.println("sum :" + total);
System.out.println("average : " + (float) total / set.size());
System.out.println("max : " + Collections.max(values));
System.out.println("min : " + Collections.min(values));
}
}
2. Hashing
해싱은 많은 양의 데이터들을 해시함수를 이용해서 작은 크기의 테이블로 대응시켜 저장할 수 있도록 하는 일종의 데이터 관리 기법입니다.
해시함수는 가변길이의 데이터를 고정길이의 데이터로 매핑해주는 함수로 이때 의 값을 해시라고 합니다.
해시함수는 데이터가 저장된 곳을 알려주기 때문에 효과적인 검색을 마칠 수 있습니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java- 컬렉션 프레임워크(Properties) (0) | 2019.07.23 |
---|---|
Java- 컬렉션 프레임워크(TreeMap) (0) | 2019.07.23 |
Java- 컬렉션 프레임워크(TreeSet) (0) | 2019.07.21 |
Java- 컬렉션 프레임워크(HashSet) (0) | 2019.07.21 |
Java- 컬렉션 프레임워크(Comparator, Comparable) (0) | 2019.07.20 |