HashMap, Hashtable   - 순서x, 중복(키x , 값o)

Map 인터페이스를 구현.
데이터를 키와 값의 쌍으로 저장. (key, value)
순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.

 


해싱(hashing)이란?

key값을 넣으면 배열의 index(저장위치)를 알려줌.
해시함수(hash function)를 이용해서 데이터를 저장 및 읽어오기(검색).
해시 테이블은 배열과 링크드 리스트가 조합된 형태.


HashMap주요메서드

  코드 설명
1 HashMap() 생성자
2 HashMap(int initialCapacity) 생성자 (초기용량)
3 HashMap(int initialCapacity, float loadFactor) 생성자 (초기용량, 몇 %면 확장셋팅기준 ex.0.8)  
4 HashMap(Map m) 생성자 (Map 타입을 HashMap으로 변경)
  코드 설명
1 Object put(Object key, Object value) 저장
2 void putAll(Map m) Map타입 저장
3 Object remove(Object key) 삭제
4 Object replace(Object key, Object value) 변경 
5 boolean replace(Object key, Object oldValue, Object newValue) 변경
  코드 설명
1 Set entrySet() [읽기] entry배열을 불러옴 (entry = key + value 한쌍)
2 Set keySet() [읽기] key값만 가져옴
3 Collection values() [읽기] value 값들만 가져옴
  코드 설명
1 Object get(Object key) key를 넣으면 그에맞는 value 반환
2 Object getOrDefault(Object key,Object defaultValue)   없는 key값을 넣으면, defaultValue에 지정된 값이 반환되게 함
3 boolean containsKey(Object key) key가 있는지 확인
4 boolean containsValue(Object vlaue) value가 있는지 확인
  코드 설명
1 int size() 저장된 개수 반환
2 boolean isEmpty() 비어있는지 확인
3 void clear() 모두삭제
4 Object clone() 복제

 

예시 1

	public static void main(String[] args) {

		HashMap map = new HashMap();
		map.put("myId", "1234");
		map.put("asdf", "1111"); // 키가 동일하므로 값이 덮어써짐.
		map.put("asdf", "1234");
		System.out.println(map);
		
		Scanner s = new Scanner(System.in);
		
		while(true) {
			System.out.println("id와 pw를 입력해주세요");
			System.out.print("id : ");
			String id = s.nextLine().trim();
			
			System.out.print("pw : ");
			String pw = s.nextLine().trim();
			System.out.println();
			
			if(!map.containsKey(id)) {
				System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
				continue;
			}
			
			if(!(map.get(id)).equals(pw)) {
				System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
				continue;
			}else if(map.get(id).equals(pw)) {
				System.out.println("로그인성공");
				break;
			}
		}
	}


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);
		System.out.println(map);
		
		Set set = map.entrySet(); // entrySet() : key와 value 한 쌍 반환
		System.out.println(set);
		System.out.println("_______________________________");
	
		Iterator it = set.iterator();
		while(it.hasNext()) {
			Map.Entry e = (Entry) it.next();
			System.out.println("이름 : " + e.getKey() + "  점수 : " + e.getValue());
		}
		System.out.println("_______________________________");
		
		set = map.keySet(); // key만 가져옴
		System.out.println("참가자 명단 : " + set);
		System.out.println("_______________________________");
	
		Collection values = map.values(); // value 만 가져옴
		it = values.iterator();
		int total = 0;
		while(it.hasNext()) {
			int i = (int) it.next();
			total += i;
		}
		System.out.println("총점 : " + total);
		System.out.println("평균 : " + total / (double)map.size());
		System.out.println("최고점수 : " + Collections.max(values));
		System.out.println("최하점수 : " + Collections.min(values));
	}


public class ex6 {
	//단어 카운팅
	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])) {  // containsKey : key가 있는지 확인. 
				int value = (int) map.get(data[i]);
				map.put(data[i], value + 1);
			}else {
				map.put(data[i], 1);
			}
		}
	
		Iterator it = map.entrySet().iterator();
		while(it.hasNext()) {
			Map.Entry entry = (Entry)it.next();
			int value = (int)entry.getValue();
			System.out.println(entry.getKey() + " : " + entry.getValue() 
								+ " " + printBar('●', value));
		}
	}
	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);
	}
}


 

TreeMap- 순서x, 중복(키x , 값o)          

< TreeSet> 과 같은특성을가지고있음.
범위 검색과 정렬에 유리한 클래스.
HashMap보다 데이터 추가, 삭제에 시간이 더걸림 (왜? 비교하면서 추가,삭제하니까)

Collections클래스   

컬렉션을 위한 메서드(static)를 제공
1. 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy, sort(), binarySearch()등...

2. 컬렉션의 동기화 - synchronizedXXX() 메서드

 


3. 변경불가(readOnly) 컬렉션 만들기 - unmodifiableXXX() 메서드


4. 싱글톤 컬렉션 만들기 - singletonXXX() 메서드              (( 객체 1개만 저장토록 ))

 


5. 한 종류의 객체만 저장한는 컬렉션 만들기 - checkedXXX() 메서드    


컬렉션 클래스 정리 & 요약

 

 

 

 


출처 : 남궁성의 정석코딩

https://www.youtube.com/@MasterNKS

 

 

+ Recent posts