ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.