您的位置:首页 > 其它

Guava包学习--Multiset

2016-01-11 14:24 274 查看
Multiset之前倒是没用过,后来看了下还挺有用,其实它就是支持重复元素的HashSet,相当于list+set的集合,综合了两种集合的优点。

它扩展了Collection:

@GwtCompatible
publicinterfaceMultiset<E>extendsCollection<E>{}




先用一下看看:

List<String>list=Lists.newArrayList("10","20","hello","hah","hah","hah");
Multiset<String>set=HashMultiset.create(list);
System.out.println(set.contains("hello"));
System.out.println(set.count("hah"));
System.out.println(set.count("haha"));
System.out.println(set.elementSet().toString()+set.entrySet().toString());
true

3

0

[hello,20,10,hah][hello,20,10,hahx3]



其实它和list很像,支持一个叫做count计数的方法,直接拿elementSet()的时候它会提供唯一的元素列表。使用它的entrySet会有一个唯一元素+计数的输出。

我们看下它的继承和实现体系:



其实它继承了AbstractMapBasedMultiset,然后AbstractMapBasedMultiset又继承了AbstractMultiset,然后又实现了Multiset的接口,Multiset继承了Collection,然后在Multiset对象中有一个count的计数,当有元素进入和输出的时候会有计数器的处理。

其实AbstractMapBasedMultiset就是一个key+count的map,这下就容易理解了。其实HashMultiSet就是对一个map进行了继承和覆盖,然后方法去操作一些唯一元素的计数与处理,但是又可以不丢失元素,还加快了get的获得速度。

至于这个Set的其实工具类应该和之前看的没有大的异同,暂时就不深入看了,接下来去看下MultiMap。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: