如何实现一种兼容Set的无序以及List的可重复的数据结构

如何实现一种兼容Set的无序以及List的可重复的数据结构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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

如何实现一种兼容Set的无序以及List的可重复的数据结构

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

如何实现一种兼容Set的无序以及List的可重复的数据结构  

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

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

如何实现一种兼容Set的无序以及List的可重复的数据结构

当使用 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。

关于如何实现一种兼容Set的无序以及List的可重复的数据结构问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。