Java HashMap, TreeMap, hashing, HashMap의 주요 메서드
by 볼빵빵오춘기더보기


- HashMap과 Hashtable - 순서x, 중복(키x,값o)
Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장한다. - Hashtable은 old버전 , HashMap은 신 버전 동기화여부만 다르다.
- reeMap은 TreeSet과 같은 특성을 가진다.
HashMap
- Map인터페이스를 구현한 대표적인 컬렉션 클래스이다.
- 순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
TreeMap
- 범위 검색과 정렬에 유리한 컬렉션 클래스이다.
- HashMap보다 데이터 추가, 삭제에 시간이 걸린다.
HashMap의 키(key)와 값(value)
- 해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
- Map인터페이스를 구현한 것으로 데이터를 키와 값의 쌍으로 저장한다.

해싱(hashing)
- 키값을 적으면 저장된 인덱스번호를 알려준다.
- 해시함수로 해시테이블에 데이터를 저장, 검색한다.
HashTable
배열과 링크드 리스트가 조합된 형태이다.(링크드리스트에 변경하기 쉬운 부분과 배열의 인덱스를 알면 값을 찾아갈 수 있는 접근성을 합친 것이라 보면된다.)

해시테이블에 저장된 데이터를 가져오는 과정

① 키로 해시함수를 호출해서 해시코드를 얻는다.
② 해시코드(해시함수의 반환값)에 대응하는 링크드리스트를 배열에서 찾는다.
③ 링크드리스트에서 키와 일치하는 데이터를 찾는다.
※ 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야한다.(why? 서로 다른 키일지라도 같은 값의 해시코드를 반환할 수 있다.)
HashMap의 생성자와 메서드
HashMap 생성자
- HashMap()
- HashMap(int initialCapacity)
- HashMap(int initialCapacity, float loadFactor)
- HashMap(Map m)
HashMap 메서드
- Object put(Object key, Object value)
- void putAll(Map m)
- Object remove(Object key)
- Object replace(Object key, Object value)
- boolean replace(Object key, Object value, Object newValue)
- Set entrySet()
- Set keySet()
- Collection values()
- Object get(Object key)
- Object getOrDefault(Object key, Object defaultValue)
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- int size()
- boolean isEmpty()
- void clear()
- Object clone()
예제 코드
예제 코드1
더보기

import java.util.*; public class Try { public static void main(String[] args) { int[] arr = {0,1,2,3,4}; int[][] arr2D = {{11,12,13}, {21,22,23}}; System.out.println("arr="+Arrays.toString(arr)); System.out.println("arr2D="+Arrays.deepToString(arr2D)); int[] arr2 = Arrays.copyOf(arr, arr.length); int[] arr3 = Arrays.copyOf(arr, 3); int[] arr4 = Arrays.copyOf(arr, 7); int[] arr5 = Arrays.copyOfRange(arr, 2, 4); int[] arr6 = Arrays.copyOfRange(arr, 0, 7); System.out.println("arr2="+Arrays.toString(arr2)); System.out.println("arr3="+Arrays.toString(arr3)); System.out.println("arr4="+Arrays.toString(arr4)); System.out.println("arr5="+Arrays.toString(arr5)); System.out.println("arr6="+Arrays.toString(arr6)); int[] arr7 = new int[5]; Arrays.fill(arr7, 9); // arr=[9,9,9,9,9] System.out.println("arr7="+Arrays.toString(arr7)); Arrays.setAll(arr7, i -> (int)(Math.random()*6)+1); System.out.println("arr7="+Arrays.toString(arr7)); for(int i : arr7) { char[] graph = new char[i]; Arrays.fill(graph, '*'); System.out.println(new String(graph)+i); } String[][] str2D = new String[][]{{"aaa","bbb"},{"AAA","BBB"}}; String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}}; System.out.println(Arrays.equals(str2D, str2D2)); // false System.out.println(Arrays.deepEquals(str2D, str2D2)); // true char[] chArr = { 'A', 'D', 'C', 'B', 'E' }; System.out.println("chArr="+Arrays.toString(chArr)); System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); System.out.println("= After sorting ="); Arrays.sort(chArr); System.out.println("chArr="+Arrays.toString(chArr)); System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); } }

예제 코드2
더보기

import java.util.*; public class Try { public static void main(String[] args) { HashMap map = new HashMap(); map.put("김자바", 90); map.put("김자바", 100); map.put("이자바", 100); map.put("강자바", 80); map.put("안자바", 90); Set set = map.entrySet(); Iterator it = set.iterator(); while(it.hasNext()) { Map.Entry e = (Map.Entry)it.next(); System.out.println("이름 : "+ e.getKey() + ", 점수 : " + e.getValue()); } set = map.keySet(); System.out.println("참가자 명단 : " + set); Collection values = map.values(); it = values.iterator(); int total = 0; while(it.hasNext()) { int i = (int)it.next(); total += i; } System.out.println("총점 : " + total); System.out.println("평균 : " + (float)total/set.size()); System.out.println("최고점수 : " + Collections.max(values)); System.out.println("최저점수 : " + Collections.min(values)); } }

예제 코드3
더보기

import java.util.HashMap; import java.util.Iterator; import java.util.Map; class Test0001 { public static void main(String[] args) { String[] data = { "A","K","A","K","D","K","A","K","K","K","Z","D" }; HashMap map = new HashMap(); for(int i=0; i < data.length; i++) { if(map.containsKey(data[i])) { int value = (int)map.get(data[i]); map.put(data[i], value+1); // 기존에 존재하는 키면 기존 값을 1증가 } else { map.put(data[i], 1); // 긱존에 존재하지 않는 키는 값을 1로 저장 } } Iterator it = map.entrySet().iterator(); while(it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); int value = (int)entry.getValue(); System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value ); } } // main public static String printBar(char ch, int value) { char[] bar = new char[value]; for(int i=0; i < bar.length; i++) bar[i] = ch; return new String(bar); // String(char[] chArr) } }


블로그의 정보
Hello 춘기's world
볼빵빵오춘기