Guava包学习--Multiset

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

它扩展了Collection:

@GwtCompatible
public interface Multiset<E> extends Collection<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, hah x 3]
 

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

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

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

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

至于这个Set的其实工具类应该和之前看的没有大的异同,暂时就不深入看了,接下来去看下MultiMap。

转载于:https://www.cnblogs.com/congsg2016/p/5121162.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值