해싱(Hashing)
- 키 값에 대한 산술적 연산에 의해 테이블의 주소를 계산하여 항목에 접근
HashTable
- 키 값의 연산에 의해 직접 접근이 가능한 구조
- <key, value>로 이루어짐
HashMap
- Map 인터페이스의 구현체로 value들이 key에 mapping되어있음
👉 <key, value>
- key 값 중복 불가능, value도 중복 불가능(null 사용 가능)
👉 만일 기존에 저장된 key와 동일한 키로 value를 저장하면 기존의 value는 새로운 value로 대체됨
- Hashing을 사용하기 때문에 많은 양의 데이터 검색에 있어서 뛰어난 성능
코드
HashMap<Integer, String> map = new HashMap<Integer, String>();
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "사과");
map.remove(1);
map.clear();
map.values();
map.get(1);
map.containsKey(1);
map.containsValue("사과");
map.isEmpty();
map.keySet();
map.size();
System.out.println(map);
for (Integer i : map.keySet()) {
System.out.println(map.get(i));
}
for (Entry<Integer, String> entry: map.entrySet())
System.out.println(entry.getKey() + entry.getValue());
HashSet
- Set 인터페이스의 구현체로 HashMap을 사용해 데이터를 저장
- 객체 그 자체를 저장
👉 key: 객체 자체 / value: 내부 구현 코드에서 필드로 선언한 객체
- 객체 자체를 저장하기 때문에 중복 불가능(단 하나의 null값만 사용 가능)
- HashMap보다 느림
코드
HashSet<Integer> set = new HashSet<>();
set.add(1)
set.remove(1)
set.removeAll(set2)
set.retainAll(set2)
set.clear()
set.size()
set.contains(1)
Iterator iter = set.iterator();
while (iter.hasNext())
System.out.println(iter.next());
for (String item: set)
System.out.println(item);