다연이네

[days23] 컬렉션클래스<Map> - HashMap, Hashtable 본문

Java

[days23] 컬렉션클래스<Map> - HashMap, Hashtable

 다연  2020. 10. 21. 21:34
반응형

Map

entry(key + value) 한 쌍으로 관리

종류

- HashMap  (동기화X)

- HashTable (동기화O)

  ( * HashTable이 먼저 나온 후 HashMap이 나왔다. (해시맵 사용 권장) )
Hash 저장될때 해싱기법으로 처리됨
hashcode(), equals() -> 저장
 key - 컬렉션 내에서 중복X, 유일성
 value - 중복 가능

 

회원 로그인하는 HashMap

HashMap<String, String> hm = new HashMap<>();
	//key, value
	// ID, PW
		
		hm.put("dayeon", "1234");
		hm.put("admin", "1234");
		hm.put("hong", "1234");
		hm.put(null, "2342");
		hm.put("kim", null);
		
		System.out.println(hm.size()); // 엔트리의 갯수: 5 (맵에서는 요소가 아니라 엔트리라고 쓰자)
        
        
		String id, pw; //똑같은지 물어봐서 맞으면 로그인 처리 (아니면 id/pw오류 메시지)
		try(Scanner scanner = new Scanner(System.in)) {
			System.out.print("> 로그인할 아이디와 비밀번호를 입력 ");
			id = scanner.next();
			pw= scanner.next(); //항상 입력값에 대한 유효성 검사가 필수지만 생략
			
			if( hm.containsKey(id) ) {
				String value = hm.get(id);
				if(pw.equals(value)) {
					System.out.println("로그인 성공");
				}else {
					System.out.println("비밀번호 오류입니다.");
				}
			}else {
				System.out.println("존재하지 않는 아이디입니다.");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}

-모든 Key값만 출력

-모든 Value값만 출력

- key / Value 형식으로 출력

Set<String> ks = hm.keySet();
Iterator<String>  ir =  ks.iterator();

		//key / value 출력
		while (ir.hasNext()) {
			String k =   ir.next();
			String v = hm.get(k); //
			System.out.printf("%s / %s\n", k  , v);
		}

		//모든 key값만 출력
		Collection<String> vc2 = hm.keySet();
		ir =  vc2.iterator();
		while (ir.hasNext()) {
			String v =   ir.next();
			System.out.println( v );
		}

		//모든 value값만 출력
		Collection<String> vc = hm.values();
		ir =  vc.iterator();
		while (ir.hasNext()) {
			String v =   ir.next();
			System.out.println( v );
		}


		//key / value 출력 - 엔트리 사용하기
		Set<Entry<String, String>>  es = hm.entrySet();
		Iterator<Entry<String, String>> ir2 = es.iterator(); // Set은 iterator 쓴다 당연히
		while (ir2.hasNext()) {
			/*Map.*/Entry</*java.lang.*/String, /*java.lang.*/String> entry = ir2.next();
			String key = entry.getKey();
			String value = entry.getValue();

			System.out.printf("%s / %s\n", key  , value);
		}

 

 

Hashtable

package review;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map.Entry;
import java.util.Set;

public class Re08 {

	public static void main(String[] args) {
		//Hashtable 컬렉션 클래스
		
		ArrayList<Person> list1 = new ArrayList<Person>();
		list1.add(new Person("배다연", 23));
		list1.add(new Person("김동준", 24));
		list1.add(new Person("카라멜", 1));
		
		ArrayList<Person> list2 = new ArrayList<Person>();
		list2.add(new Person("박새로이", 30));
		list2.add(new Person("조이서", 20));
		list2.add(new Person("오수아", 30));
		
		LinkedHashMap<Integer, ArrayList<Person>> class5= new LinkedHashMap<>();
				//조	조원들이 들어있는 어레이
		
		class5.put(1, list1); //1조
		class5.put(2, list2); //2조
		
		Set<Entry<Integer, ArrayList<Person>>> set = class5.entrySet();
		Iterator<Entry<Integer, ArrayList<Person>>> ir = set.iterator();
		while (ir.hasNext()) {
			Entry<Integer,ArrayList<review.Person>> entry = ir.next();
			System.out.printf("[%d조]\n",entry.getKey());
			ArrayList<Person> val = entry.getValue();
			Iterator<Person> irr= val.iterator();
			while (irr.hasNext()) {
				Person person = irr.next();
				System.out.printf("%s %d\n", person.name, person.age);
			}
			
		}
		
		
		
	}

}
class Person{
	String name;
	int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	
}

출력값

[1조]
배다연 23
김동준 24
카라멜 1
[2조]
박새로이 30
조이서 20
오수아 30

반응형
Comments