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)
}
}
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 지네릭스(Generics) (0) | 2023.12.07 |
---|---|
Java Collections 클래스, 컬렉션 클래스 요약 (0) | 2023.12.07 |
Java TreeSet, 이진 탐색 트리(binary seach tree), TreeSet 생성자 · 메서드, 트리 순회(tree traversal) (0) | 2023.12.07 |
Java HashSet, TreeSet, HashSet의 주요 메서드 (1) | 2023.12.07 |
Java Comparator와 Comparable (0) | 2023.12.07 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기