list集合判断重复数据_请实现一种兼容Set的无序,List的可重复的数据结构

Java 中,提供了很多常用的数据结构。比如,Map、List、Set 等。但是,在很多时候,我们可能需要统计某个数据出现的次数,这时往往我们的实现代码可能如下所示:

4023ba763c4427a616cde79e49db765e.png

如果在多个项目,或者是一个项目中,有多个方法,多个功能需要这种统计功能。那么能不能把这种实现,抽取成一个新的数据结构,方便我们在任何地方使用?这就是本文所要说的,一种兼容Set的无序,List的可重复的数据结构:Multiset。

5910951ea3c3c5fb458b1a2126509f3e.png

这个问题,有可能你在面试中也会被问到。因为数据结构,看似最枯燥,但它具有最长久的生命力。

Guava 类库中提供了一种兼容 Set 的无序,List 的可重复的数据结构 Multiset。Multiset 底层还是数据结构,它就相当于对我们上面的代码进行了封装。同时也算是对 Java 中数据结构的一种扩展。

a84ac8e6135f4cde32916936af2ceacb.png

当使用 Multiset 后,我们的代码就变得非常的简单了。我们只需存放,而最终的出现次数,重复次数,只需要通过 count 方法就可以获得,非常的方便。

同时 Multiset 还提供了 setCount(E, int) 方法,可以修改元素 E 在 Multiset 中的次数,但是不能把元素出现的次数修改为负数和大于 Integer.MAX_VALUE 的值,否则将会抛出异常。

Multiset 中的几个特点,可以总结如下:

  • Multiset 中的元素出现的次数只能为正数,前面说了原因。

    如果E的出现次数为 0,那么 E 将不出现在 multiset中,是不能在 elementSet() 和 entrySet() 的视图中。

  • multiset.size() 返回这个集合的大小,相当于在 multiset 中元素的出现的总数。

    如果想得到 multiset 中不同元素出现的总数,可以利用 elementSet().size() 来实现。

  • multiset.iterator() 可以遍历 Multiset 中的所有元素,所以 iteratior 遍历的次数就等于 multiset.size()。

  • Multiset 支持添加、删除元素,设置元素出现的次数;

    setCount(elem, 0) 相当于移除 elem 的所有元素。

  • multiset.count(elem) 方法中的 elem 如果没有出现在 Multiset 中,那么它的返回值永远都是 0。

Multiset 还有非常多的实现,比如:HashMultiset、LinkedHashMultiset、TreeMultiset、EnumMultiset、ImmutableMultiset。可以说 Guava 类库非常的强大,平时你能用到的很多工具功能,都能在它里面找到实现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值