-
day27 - JAVA (자바, Collection, Iterator, Map)KIC/JAVA 2021. 7. 21. 22:26반응형
[Map의 메서드]
-> put() : key 와 value 값을 입력하는 것
-> containsKey() : 해당되는 키가 map에 포함되는지 확인하는 것
-> get() : key 값을 제공해 map이 가지고 있는 해당 value 값을 반환하는 것
-> keySet() : map의 key 값을 뽑아와서 Set 에 넣을 수 있다.
-> values() : map의 value 값을 뽑아서 Collection 에 넣을 수 있다.
-> entrySet() : map의 value 와 key 값을 한꺼번에 모아서 Set으로 보내는 것
[keySet()/values()/entrySet()]
package javaPro.java_collection; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapEx1 { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<String, Integer>(); String[] names = { "홍길동", "김삿갓", "이몽룡", "임꺽정", "김삿갓" }; int[] nums = { 1234, 4567, 2350, 9870, 3456 }; for (int i = 0; i < names.length; i++) { map.put(names[i], nums[i]); } System.out.println(map); // Value =map.get(Key) => key에 해당하는 Value 값을 리턴 System.out.println("홍길동의 번호 : " + map.get("홍길동")); System.out.println("이몽룡의 번호 :" + map.get("이몽룡")); System.out.println("김삿갓의 번호 :" + map.get("김삿갓")); // Key 값들만 조회 System.out.println("Key들만 조회하기"); Set<String> keys = map.keySet(); //key 값을 Set에 보내기 for (String k : keys) { System.out.println(k + "의 번호" + map.get(k)); } // Value값들만 조회하기 System.out.println("Value 값들만 조회"); Collection<Integer> values = map.values(); // => values 값을 Collection에 보내기 for (Integer v : values) { System.out.println(v); // Key, Value 201 } System.out.println("Key, Value의 쌍인 객체로 조회"); Set<Map.Entry<String, Integer>> entry = map.entrySet(); // key 와 values 값을 묶어서 Set에 보내기 for (Map.Entry<String, Integer> m : entry) { System.out.println(m.getKey() + "의 번호 :" + m.getValue()); System.out.println(m); } } }
[login 예제]
package javaPro.java_collection; import java.util.*; public class MapLogin { public static void main(String[] args) { Hashtable<String, String> map = new Hashtable<String, String>(); map.put("spring", "12"); map.put("summer", "123"); map.put("fall", "1234"); map.put("winter", "12345"); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("아이디와 비밀번호를 입력해주세요."); System.out.print("아이디 : "); String id = scanner.nextLine(); System.out.print("비밀번호 : "); String password = scanner.nextLine(); System.out.println(); // System.out.println(id); // System.out.println(password); if (map.containsKey(id)) { // id가 있는지 확인 if (map.get(id).equals(password)) { // map에 저장되어 있는 password 확인 System.out.println("로그인 되었습니다."); break; } else { System.out.println("비밀번호 오류. 다시 입력하세요."); } } else { System.out.println("입력하신 아이디가 존재 x"); } } } }
[Iterator 예제]
package javaPro.java_collection; import java.util.Map; import java.util.Set; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; /* //Collection을 상속받은 객체들만 iterator를 쓸수 있다. * Collection : co.interator(); * Set: set.iterator() * List: li.interator() * * //Collection을 상속받지 못한 Map는 iterator가 없다. //HashMap을 Iterator로 수정하여 프린트한다 * Map -> Set: keySet() -> iterator() (iterator를 쓰기 위해 Map을 Set으로 바꿔서 사용하기) * Map -> Set: entrySet() ->iterator() (iterator를 쓰기 위해 Map을 Set으로 바꿔서 사용하기) * Map -> Collection : values() -> iterator() (iterator를 쓰기 위해 Map을 Collection으로 바꿔서 사용하기) * * */ public class IteratorEx2 { public static void main(String[] args) { // generic 표현 x Map map = new HashMap(); // generic 표현 // Map<String, Integer> map = new HashMap<String, Integer>(); map.put("나자바", 85); map.put("홍길동", 90); map.put("동장군", 80); map.put("홍길동", 95); // key 중복시 값 수정 System.out.println("총 entry 수 : " + map.size()); // 객체 찾기 System.out.println("/t홍길동 : " + map.get("홍길동")); System.out.println(); // map.keySet() Set keySet = map.keySet(); // map을 keySet으로 Set에 넣는다. Iterator keyIterator = keySet.iterator(); // 그리고 Iterator를 사용한다. while (keyIterator.hasNext()) { String key = (String) keyIterator.next(); // Set<String>이기 때문에 (String) 붙혀서 형변환 Integer value = (Integer) map.get(key); // 값은 (Integer)로 형변환 System.out.println("\t" + key + ": " + value); } } }
[Iterator 예제 변형]
-> generic 표현해서 형변환 x
-> keySet 활용하기
-> entrySet을 활용하기
-> values 활용하기
package javaPro.java_collection; import java.util.Map; import java.util.Set; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; // /*HashMap을 Iterator로 수정하여 프린트한다 //Collection을 상속받은 객체들만 iterator를 쓸수 있다. * Collection : co.interator(); * Set: set.iterator() * List: li.interator() * * //Collection을 상속받지 못한 Map는 iterator가 없다. * Map -> Set: keySet() -> iterator() (iterator를 쓰기 위해 Map을 Set으로 바꿔서 사용하기) * Map -> Set: entrySet() ->iterator() (iterator를 쓰기 위해 Map을 Set으로 바꿔서 사용하기) * Map -> Collection : values() -> iterator() (iterator를 쓰기 위해 Map을 Collection으로 바꿔서 사용하기) * * */ public class IteratorEx2_2 { public static void main(String[] args) { // generic 표현 Map<String, Integer> map = new HashMap<String, Integer>(); map.put("나자바", 85); map.put("홍길동", 90); map.put("동장군", 80); map.put("홍길동", 95); // key 중복시 값 수정 System.out.println("총 entry 수 : " + map.size()); // 객체 찾기 System.out.println("\t홍길동 : " + map.get("홍길동")); System.out.println(); // map.keySet() Set<String> keySet = map.keySet(); // map을 keySet으로 Set에 넣는다. Iterator<String> keyIterator = keySet.iterator(); // 그리고 Iterator를 사용한다. System.out.println("Set 으로 출력"); while (keyIterator.hasNext()) { String key = keyIterator.next(); // generic이 이미 앞에서 명시해서 형변환 필요x Integer value = map.get(key); // generic이 이미 앞에서 명시해서 형변환 필요x System.out.println("\t" + key + ": " + value); } System.out.println(); // iterator에 entrySet 넣어주기 Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); Iterator<Map.Entry<String, Integer>> entryIt = entrySet.iterator(); System.out.println("Entry로 출력"); while (entryIt.hasNext()) { Map.Entry<String, Integer> en = entryIt.next(); System.out.println("\t" + en.getKey() + " : " + en.getValue()); } System.out.println(); // Collection에 values 넣어주기 -> key 값은 출력하지 못한다. System.out.println("Collection으로 값만 출력"); System.out.println("map.values()"); Collection<Integer> c = map.values(); Iterator<Integer> valueIterator = c.iterator(); while (valueIterator.hasNext()) { Integer value = valueIterator.next(); System.out.println("\t" + value); } System.out.println(); // 객체 선택 map.clear(); System.out.println("총 Entry 수" + map.size()); } }
[Iterator 예제2]
package javaPro.java_collection; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.Set; class MapEx3 { // static HashMap phoneBook = new HashMap<>(); static HashMap<String, Map<String, String>> phoneBook = new HashMap<>(); public static void main(String[] args) { addPhoneNo("친구", "이자바", "010-111-1111"); addPhoneNo("친구", "김자바", "010-222-2222"); addPhoneNo("친구", "김자바", "010-333-3333"); addPhoneNo("회사", "김대리", "010-444-4444"); addPhoneNo("회사", "김대리", "010-555-5555"); addPhoneNo("회사", "박대리", "010-666-6666"); addPhoneNo("회사", "이과장", "010-777-7777"); addPhoneNo("세탁", "010-888-8888"); // System.out.println(phoneBook); printList(); } static void addPhoneNo(String groupName, String name, String tel) { addGroup(groupName); // 그룹네임이 기존에 없는 이름이라면 생성 // phoneBook 에서 기존 그룹네임중 groupName에 해당되는 그룹 가져오기 HashMap<String, String> group = (HashMap) phoneBook.get(groupName); // HashMap group = (HashMap) phoneBook.get(groupName); // 지정한 해당 그룹에 전화번호와 이름 추가 group.put(tel, name); // 이름은 중복될 수 있으니 전화번호를 key로 저장 } static void addPhoneNo(String name, String tel) { addPhoneNo("기타", name, tel); } // 그룹네임이 없을 때 추가하는 메서드<String, HashMap> static void addGroup(String groupName) { if (!phoneBook.containsKey(groupName)) { phoneBook.put(groupName, new HashMap()); } } static void printList() { Set set = phoneBook.entrySet(); Iterator<Map.Entry<String, Map<String, String>>> it = set.iterator(); while (it.hasNext()) { Map.Entry<String, Map<String, String>> e = it.next(); // System.out.println("* " + e.getKey()); // System.out.println(e.getValue()); // Map 안에 있는 Map도 분할해서 따로 찍어주고 싶기 때문에 sbuIt을 만드는 과정 Map<String, String> subMap = e.getValue(); // Map<String, String>가 자료형인 subMap부터 생성 Set subSet = subMap.entrySet(); Iterator<Map.Entry<String, String>> subIt = subSet.iterator(); System.out.println("* " + e.getKey() + "[" + subMap.size() + "]"); while (subIt.hasNext()) { Map.Entry<String, String> subE = subIt.next(); System.out.println(subE.getKey() + " " + subE.getValue()); } } } }
300x250'KIC > JAVA' 카테고리의 다른 글
day29 - JAVA (자바, 메소드 참조, 스트림, 병렬처리) (0) 2021.07.25 day28 - JAVA (자바, Collection 예제, 람다식) (0) 2021.07.22 day26 - JAVA (자바, Collection Framework) (0) 2021.07.20 day25_2 - JAVA (자바, Collection) (0) 2021.07.19 day25_2 - JAVA (자바, Collection) (0) 2021.07.19