Google Guava 컬렉션 1: Multisets
2322 단어 guava multiset
Guava를 계속 연구해 보겠습니다. 이번에는 Multiset을 소개하겠습니다. 자주 사용하지 않지만 소개할 필요가 있습니다.
Multiset은 무엇입니까?
말 그대로 Multiset과 Set의 차이는 여러 개의 같은 대상을 저장할 수 있다는 것이다
List와 어떻게 다릅니까?
JDK에서 List와 Set은 기본적인 차이가 하나 있다. 바로 List는 여러 개의 같은 대상을 포함할 수 있고 순서가 있는 반면에 Set는 중복될 수 없고 순서가 보장되지 않는다는 것이다. (어떤 것은 순서가 있는 것을 실현할 수 있다. 예를 들어 Linked Hash Set과Sorted Set 등)
그래서 Multiset는List와 Set 사이의 회색 지대를 차지했다. 중복은 허용되지만 순서는 보장되지 않는다.
주의: 이 집합은 아파치 commons collections에서도'Bag'이라고 불린다.
어떻게 사용합니까?
Multiset는 각 대상의 수량을 추적하는 유용한 기능이 있기 때문에 숫자 통계를 작성할 수 있다.
예전에 이렇게 통계를 냈는데
Map<MyClass,Integer> objectCounts = new HashMap<MyClass,Integer>();
public void incrementCount(MyClass obj) {
Integer count = objectCounts.get(obj);
if (count == null) {
objectCounts.put(obj,0);
} else {
objectCounts.put(obj,count++);
}
}
public int getCount(MyClass obj) {
Integer count = objectCounts.get(obj);
if (count == null) {
return 0;
} else {
return count;
}
}
좀 귀찮아요?그래,Multiset을 시도해 보자.
Multiset<MyClass> myMultiset = HashMultiset.create();
MyClass myObject = new MyClass();
myMultiset.add(myObject);
myMultiset.add(myObject); // add it a second time.
System.out.println(myMultiset.count(myObject)); // 2
myMultiset.remove(myObject);
System.out.println(myMultiset.count(myObject)); // 1
훨씬 간단하죠. 사실 한 번에 하나씩 추가할 수도 있고 삭제할 수도 있어요.
Multiset<MyClass> myMultiset = HashMultiset.create();
MyClass myObject = new MyClass();
myMultiset.add(myObject,5); // Add 5 copies of myObject
System.out.println(myMultiset.count(myObject)); // 5
myMultiset.remove(myObject,2); // remove 2 copies
System.out.println(myMultiset.count(myObject)); // 3
유용하지 않습니까? 사실Multiset은 다른 실현이 많기 때문에 API 설명을 읽어보시기 바랍니다.
http://docs.guava-libraries.googlecode.com/git-history/v9.0/javadoc/com/google/common/collect/Multiset.html