Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가집니다.
key-value 방식
여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다.
Map 인터페이스를 구현한 모든 Map 컬렉션 클래스는 다음과 같은 특징을 갑니다.
1. 요소의 저장 순서를 유지하지 않습니다. // 1번은 Set 컬렉션 클래스와 동일
2. 키는 중복을 허용하지 않지만, 값(value)의 중복은 허용합니다 // 이러한 이유때문에 ID,PW 에서 쓸 수 밖에 없음
대표적인 Map 컬렉션 클래스에 속하는 클래스
1.HashMap<K,V>
2. Hashtable<K, V>
3. TreeMap<K, V>
HashMap 클래스
HashMap을 사용해서 ID를 만들어보자
HashMap map = new HashMap(); // 키,밸류는 보통 String 타입으로씀
// put >> List와 Set 과 다르게 put을 사용 // 여기서 드는생각 / 왜 add가 아닌 put을 썼을까?
지금까지 배운 범위에서 이해했을때) List,Set,Map은 다 배열이다 하지만 Map만 유일하게
하나의 박스를 넣을때 2칸짜리 박스를 넣기때문에 다르게 표기한것같다.
( K , Y ) << 키와 밸류는 보통 문자열을 사용한다.
1 map.put("myId", "1234"); // 입력할떄 쓰는것 // 키는 유니크한값 >> 중복이 안되기때문에,
2 map.put("asdf", "1111"); //
3 map.put("asdf", "1234"); // 2번 적고 3번적으면 2,3 키가 같기때문에 중복은 안되며,
나중에 적은 3번이 2번을 덮고 값을 반환한다.
System.out.println(map);
>> 그렇게 출력을 하면
myId , 1234
asdf , 1234 가 출력된다.
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("ID를 입력 :");
String ID = sc.next();
System.out.println("PW를 입력 :");
String PW = sc.next();
//id가 생성가능한지 확인하고 pw 를 만들어야한다. >>ID(키)는 중복이 안되기때문에 컨테인으로 확인하면서
if (!map.containsKey(ID)) { // 맵 배열에 동일한 ID가 포함되어있는지 확인 //
System.out.println("아이디가 존재하지 않습니다");
continue;
}
if (!map.get(ID).equals(PW)) {//ID의 리턴값을 불러와라 == 그거랑 PW가 같은지 확인
System.out.println("패스워드 불일치");
continue;
}else {
System.out.println("로그인 성공쓰");
break;
}
}
//key와 value를 한번에 쓸때
HashMap map = new HashMap();
map.put("김자바", new Integer(90)); // put(K key, V value) 메소드 // 해당 맵에 전달된 키에 대응하는 값으로 매핑함.
map.put("김자바", new Integer(100));
map.put("이자바", new Integer(100));
map.put("강자바", new Integer(80));
map.put("안자바", new Integer(90));
//System.out.println("---------------------------------------");
Set set = map.entrySet(); // Map에 값을 전체 출력+ Key와 value값이 모두 필요한 경우= entrySet() 메소드를 사용
//추가로 Set으로 한 이유는 중복을 없애기 위해
Iterator it = set.iterator();
while(it.hasNext()) { // 둘다 가져올때
Map.Entry e = (Map.Entry)it.next(); // object 타입이면 안댐 // 키는 스트링타입 // 밸류는 인티저타입 이라서 캐스팅연산을 해야한다.
System.out.println("이름 : "+e.getKey());
System.out.println("점수: "+e.getValue());
}
//System.out.println("---------------------------------------");
set = map.keySet();
it = set.iterator();
while(it.hasNext()) { // 이거는 키값만 가져올때
String key = (String)it.next();
System.out.println(key + " " + map.get(key) );
}
//System.out.println("---------------------------------------");
// value는 반환타입이 collection
Collection values = map.values();// 밸류값만 가져올려고 하는거라는데
it = values.iterator();
while(it.hasNext()) {
Integer value = (Integer)it.next();
System.out.println(value);
'java' 카테고리의 다른 글
쓰레드(Thread),쓰레드 구현하는방법 (0) | 2022.04.28 |
---|---|
properties (0) | 2022.04.27 |
Set 컬렉션,HashSet,TreeSet (0) | 2022.04.26 |
Iterator와 Listlterator (0) | 2022.04.26 |
Stack과 Queue (0) | 2022.04.26 |
댓글