JAVA

[JAVA] HashMap

시크릿스토리 2024. 5. 23. 17:17
Map 인터페이스

Collection Framework는 크게 3가지 인터페이스 중 한가지를 상속받아 구현해놓았다. 

List 인터페이스 / Set  인터페이스 / Map 인터페이스

하지만 Map인터페이스는 List 인터페이스와 Set  인터페이스 와는 다른 구조상의 차이가 있다. 

 

<특징> 

1. 키(Key)와 값(Value)을 하나의 쌍으로 저장하는 방식을 사용한다. 

2. 요소의 저장 순서를 유지하지 않는다. 

3. 키는 중복을 허용하지 않지만, 키가 다르면 중복되는 값도 저장 가능하다. 

4. 대표적인 클래스로  HashMap, HashTable, TreeMap이 있으며, HashMap이 가장 많이 사용된다. 

 

<코드예시>

public class Application01 {
    public static void main(String[] args) {     

        HashMap hmap = new HashMap();    

        hmap.put("one", mango());
        hmap.put(12,"red apple");
        hmap.put(33, 123);

        System.out.println(hmap); // 출력값 {33=123, one=mango, 12=red apple}
        //요소의 저장순서를 유지하지 않기 때문에 값의 순서가 뒤섞임 
        //(하지만 키와 값은 1:1로 매칭되어 출력됨)

        hmap.put(12,"yellow");
        System.out.println(hmap); //출력값 {33=123, one=mango, 12=yellow}
        //키가 같아서 위의 red apple에서 값이 바뀜

        hmap.put(11, "yellow banana");
        hmap.put(9, "yellow banana");
        System.out.println(hmap); //출력값 {33=123, one=mango, 9=yellow banana, 11=yellow banana, 12=yellow}
        //값이 중복되어도 키가 다르면 각각 저장됨
        
        //특정키(9)의 값만 얻고 싶다면,
        System.out.println(hmap.get(9)); //출력값 yellow banana
        
        //특정키(9)를 삭제하고 싶다면,
        hmap.remove(9);
        System.out.println(hmap); // 출력값 {33=123, one=mango, 11=yellow banana, 12=yellow}

        System.out.println(hmap.size()); //size는 길이..출력값 4            
    }
}

 

다른방법으로,

iterator와 사용하는 방법도 있다. 

iterator는 반복문과 비슷하지만 인덱스 순서가 정해지지 않아서 반복문을  못 쓸 경우에 사용한다. 

//정의방법: Iterator<T>iter = Collection.iterator();
public class Application01 {
    public static void main(String[] args) {


        Iterator<String> keyIter = hmap2.keySet().iterator();

        //hasNext: 다음요소가 있는지 확인한다. 요소가 있다면 'true'를 반환하고,
        //없다면 'false'를 반환
        //next() : 다음 요소를 반환
        while (keyIter.hasNext()){
            String key = keyIter.next();
            String value = hmap2.get(key);
            System.out.println(key + "  = " + value);
        }
        
       /* 출력값
        four  = html5
        one  = java 8
        two  = oracle
        three  = jdbc
        five  = css3*/
        
       System.out.println("==============================") 

        //값만 불러오고 싶을때, 
        // value객체들만 values() 메소드로 Collection 으로 만듬.
        Collection<String> values = hmap2.values();

        // Iterator()
        Iterator<String> valueIter = values.iterator();
        while(valueIter.hasNext()){
            System.out.println(valueIter.next());
        }
        
        /*출력값
        html5
        java 8
        oracle
        jdbc
        css3*/

        System.out.println("==============================") 


        // 배열로 처리할 경우, 
        Object[] valueArr = values.toArray();
        for (int i = 0; i < valueArr.length; i++) {
            System.out.println(i + " : " + valueArr[i]);
        }
        
        /*출력값 
        0 : html5
        1 : java 8
        2 : oracle
        3 : jdbc
        4 : css3*/


        System.out.println("==============================") 

        // Map의 내부클래스인 entrySet() 이용
        Set<Map.Entry<String,String>> set = hmap2.entrySet();
        // entry : 키 객체와 값 객체를 쌍으로 묶은 것
        Iterator<Map.Entry<String,String>> entryIterator = set.iterator();
        while(entryIterator.hasNext()){
            Map.Entry<String,String> entry = entryIterator.next();
            System.out.println(entry.getKey() + " = " + entry.getValue());
            
            /*출력값
            four = html5
            one = java 8
            two = oracle
            three = jdbc
            five = css3*/
        }
    }
}