Hello

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

볼빵빵오춘기

활동하기