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
댓글