JAVA详解关于Guava的新集合类型Mulitiset使用及区别

Guava存在的价值

引入了很多JDK没有的,但明显有用的新集合类型。这些信类型是为了和JDK集合并存,而没有往JDK集合抽象中硬塞其他概念

新集合的方法Mulitiset与JDK集合方法区别

在这里插入图片描述
JDK集合:
set是无序并且元素不能重复的集合
list是有序并且元素可以重复的集合
Guava:
Mulitiset是无序的并且可以重复,区别于set也区别于list,但拥有他们的共性。

怎么看待Mulitiset

以ArrayList 视角来看待

  1. 看做没有元素顺序限制的ArrayList
  2. add(e)添加单个给定元素
  3. iterator()返回一个迭代器,包含Mulitiset所有元素(包括重复元素)
  4. size返回所有元素的总个数(包含重复元素)

以Map视角来看待

  1. Map<E,Integer>,键为元素,值为计数
  2. count(Object) 返回给定元素的计数
  3. entrySet 返回Set<Mulitiset.Entry>,和Map的entrySet类似
  4. elementSet反馈所有不重复元素的Set,和Map的keySet类似

Mulitiset与Map的区别

  1. 元素计数只能是正数
  2. mulitiset.size返回集合大小
  3. mulitiset.iterator会迭代重复元素
  4. mulitiset支持直接设置元素的计数
  5. 没有的元素mulitiset.count(e)为0,但是Map方法会反馈个null

Mulitiset如何实现

  1. HashMultiset
  2. TreeMultiset
  3. LinkedHashMultiset
  4. ConcurrentHashMulitiset
  5. Immutableulitiset

Mulitiset实战案例

使用Mulitiset集合类,实现统计一篇文章中文字出现次数功能

public class MultisetTest {

    private static final String text =
            "《南陵别儿童入京》" +
                    "白酒新熟山中归,黄鸡啄黍秋正肥。" +
                    "呼童烹鸡酌白酒,儿女嬉笑牵人衣。" +
                    "高歌取醉欲自慰,起舞落日争光辉。" +
                    "游说万乘苦不早,著鞭跨马涉远道。" +
                    "会稽愚妇轻买臣,余亦辞家西入秦。" +
                    "仰天大笑出门去,我辈岂是蓬蒿人。";

    @Test
    public void handle() {
        // multiset创建
        Multiset<Character> multiset =
                HashMultiset.create();

        // string 转换成 char 数组
        char[] chars = text.toCharArray();

        // 遍历数组,添加到multiset中
        Chars.asList(chars)
                .stream()
                .forEach(charItem -> {
                    multiset.add(charItem);
                });

        System.out.println
                ("size : " + multiset.size());

        System.out.println
                ("count : " + multiset.count('人'));

    }
}

运行结果
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值