Programing/JAVA

JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 4부 Map

리커니 2018. 11. 14.
반응형

JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 4부 Map

 

Link : JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 1부 List

 

Link : JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 2부 Set

 

Link : JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 3부 Queue

 

 

Map은 Collection을 상속 받지 않은 저장 객체 입니다.

그렇기 때문에 사용 할 수 있는 메소드 부터가 Collection을 상속받은 List, Set, Queue와는 다릅니다.

 

기존에 Collection 들은 데이터(Value)만 저장을 했다면, Map의 경우에는 Key, Value 가 한 쌍이 되어야 합니다.

그리고 Key는 중복을 허용하지 않죠.

요즘 많이 사용되는 NoSQL 들의 자료구조와 흡사합니다.

 

Java 1.8 에서는 23개의 Map 메소드를 제공하는데 아래의 표를 참고하시면 됩니다.

Method Name Explanation
size Map 객체의 사이즈를 리턴
isEmpty Map 객체가 비어있는지 체크. 비었다면 true, 아니면 false 
containsKey Map 내에 파라미터로 전달된 Key 값이 존재하는지 확인. 있다면 true, 없다면 false
containsValue Map 내에 파라미터로 전달된 Value 값이 존재하는지 확인. 있다면 true, 없다면 false
get Map 내에 파라미터로 전달된 Key 값이 존재한다면 value를 리턴, 없다면 null 리턴
put Map 내에 파라미터로 전달된 Key, Value를 삽입. 키가 중복된다면 Value update
remove Map 내에 파라미터로 전달된 Key 값이 존재하면 삭제
putAll  복수의 Map 객체를 합침. Key가 중복되면 update
clear Map 내 데이터 전체 삭제
keySet Map 내 Key를 Set 포멧으로 리턴
values Map 내 value를 Collection 포멧으로 리턴
entrySet Map 내 모든 값을 리턴 (key, value)
equals Object를 비교해 같으면 true, 다르면 false 리턴
hashCode Object의 hashcode를 리턴
getOrDefault Map 내에 파라미터로 전달된 Key 값이 존재하면 그 value를, 없다면 default 값을 리턴
forEach Map 반복자(for, iterator). 람다식에서 활용.
replaceAll Map 내 일치하는 값 변경, 람다식에서 활용
putIfAbsent Map 내에 파라미터로 전달된 Key값이 있다면 그 값을 리턴, 없다면 Null을 리턴하고 삽입.
replace Map 내 파라미터로 전달된 Key 값이 있다면 value를 수정, 없으면 아무 작업 안함.
computeIfAbsent Map 내에 파라미터로 전달된 Key값이 있을 경우 compute
computeIfPresent Map 내에 파라미터로 전달된 Key 값이 없을 경우 compute
compute Map 내에 Key값이 일치하는 Value에 대한 연산 처리. 람다식 사용
merge Map 내에 파라미터로 전달된 Key 값의 value와 새로운 value 값을 사용하는 람다식 연산

 

그럼 위의 메소드들을 사용한 예제를 보도록 하시죠.

 

public static void main(String[] args) {
        
    Map<Integer, String> map = new HashMap<Integer, String>();
        
    map.put(1, "Java");
    map.put(2, "Javascript");
    map.put(3, "C");
    map.put(4, "C++");
    System.out.println("==========put test end===========");
        
    System.out.println(map.get(1));
    System.out.println(map.get(2));
    System.out.println(map.get(3));
    System.out.println(map.get(4));
    System.out.println(map.get(5));
    System.out.println("==========get test end===========");
        
    map.put(4, "C#");
    System.out.println(map.get(4));
    System.out.println("==========duplication Key test end===========");
        
    System.out.println(map.containsKey(3));
    System.out.println(map.containsValue("Java"));
    System.out.println(map.containsValue("javascript"));
    System.out.println("==========contains test end===========");
        
    map.remove(4);
    System.out.println(map.get(4));
    System.out.println("==========remove test end===========");
        
    Map<Integer, String> map2 = new HashMap<Integer, String>();
       
    map2.put(1, "Python");
    map2.put(6, "Ruby");
    
    map.putAll(map2);
    System.out.println(map.toString());
    System.out.println("==========putAll test end===========");
        
    map.clear();
    System.out.println(map.toString());
    System.out.println("==========clear test end===========");
      
    Set<Integer> testKeySet = map2.keySet();
    System.out.println(testKeySet.toString());
    System.out.println("==========keySet test end===========");
     
    Collection<String> testValues = map2.values();
    System.out.println(testValues.toString());
    System.out.println("==========values test end===========");
     
    Set<Map.Entry<Integer, String>> testEntrySet = map2.entrySet();
    for(Iterator<Map.Entry<Integer, String>> itr = testEntrySet.iterator(); itr.hasNext();){
        System.out.println(itr.next());
    }
    System.out.println("==========entrySet test end===========");
       
    System.out.println(map.equals(map2));
    System.out.println(map2.equals(map2));
    System.out.println("==========equals test end===========");
        
    System.out.println(map2.hashCode());
    System.out.println("==========hashCode test end===========");
        
    System.out.println(map2.getOrDefault(1, "language"));
    System.out.println(map2.getOrDefault(10, "language"));
    System.out.println("==========getOrDefault test end===========");
        
    map2.forEach((k,v)->System.out.println("key :"+k+" value : "+v));
    System.out.println("==========getOrDefault test end===========");
        
    map2.put(2, "Python");
    System.out.println(map2.toString());
    map2.replaceAll((k, v) -> {
        if (v.equals("Python")){
            return "Java";
        }
        return v;
    });
    System.out.println(map2.toString());
    System.out.println("==========replaceAll test end===========");
       
    System.out.println(map2.putIfAbsent(1, "Javascript"));
    System.out.println(map2.putIfAbsent(3, "Javascriptb"));
    System.out.println(map2.toString());
    System.out.println("==========putIfAbsent test end===========");
      
    map2.replace(2, "Python");
    map2.replace(5, "Python");
    System.out.println(map2.toString());
    System.out.println("==========replace test end===========");
      
    map2.computeIfAbsent(7, k -> "7");
    System.out.println(map2.toString());
    System.out.println("==========computeIfAbsent test end===========");
      
    map2.computeIfPresent(6, (k, v) -> v+"!");
    System.out.println(map2.toString());
    System.out.println("==========computeIfPresent test end===========");
      
    map2.compute(1, (k, v) -> v+"!");
    System.out.println(map2.toString());
    System.out.println("==========compute test end===========");
            
    Map<String, Integer> map3 = new HashMap<String, Integer>();
    map3.put("A", 1);
    map3.merge("A", 10, Integer::sum);
    System.out.println(map3.toString());
}

 

[출력 결과]

==========put test end===========
Java
Javascript
C
C++
null
==========get test end===========
C#
==========duplication Key test end===========
true
true
false
==========contains test end===========
null
==========remove test end===========
{1=Python, 2=Javascript, 3=C, 6=Ruby}
==========putAll test end===========
{}
==========clear test end===========
[1, 6]
==========keySet test end===========
[Python, Ruby]
==========values test end===========
1=Python
6=Ruby
==========entrySet test end===========
false
true
==========equals test end===========
-1886771463
==========hashCode test end===========
Python
language
==========getOrDefault test end===========
key :1 value : Python
key :6 value : Ruby
==========getOrDefault test end===========
{1=Python, 2=Python, 6=Ruby}
{1=Java, 2=Java, 6=Ruby}
==========replaceAll test end===========
Java
null
{1=Java, 2=Java, 3=Javascriptb, 6=Ruby}
==========putIfAbsent test end===========
{1=Java, 2=Python, 3=Javascriptb, 6=Ruby}
==========replace test end===========
{1=Java, 2=Python, 3=Javascriptb, 6=Ruby, 7=7}
==========computeIfAbsent test end===========
{1=Java, 2=Python, 3=Javascriptb, 6=Ruby!, 7=7}
==========computeIfPresent test end===========
{1=Java!, 2=Python, 3=Javascriptb, 6=Ruby!, 7=7}
==========compute test end===========
{A=11}

 

 

위의 코드와 출력결과를 비교해 보시면 사용법은 충분히 이해가 되실거라 생각이 듭니다.

추가로 Java 1.8에서 새로나온 Stream에 대한 내용은 아래의 Link를 참고 하세요.

 

Link : Java 8 Stream 을 사용해보자. About Stream in Collection of Java8

 

반응형

댓글

💲 추천 글