• guava 之 Multiset/Multimap 使用总结


    Multiset集合

      Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象。在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)所以Multiset占据了List和Set之间的一个灰色地带:允许重复,但是不保证顺序。
      常见使用场景:Multiset有一个有用的功能,就是跟踪每种对象的数量,所以你可以用来进行数字统计。 常见的普通实现方式如下:

    String strWorld = "wer|dfd|dd|dfd|dda|de|dr";
    String[] words = strWorld.split("\|");
    
    Multiset<String> wordsMultiset = HashMultiset.create();
    wordsMultiset.addAll(Arrays.asList(words));
    
    for (String key : wordsMultiset.elementSet()) {
        System.out.println(key + " count:" + wordsMultiset.count(key));
    }
    /**
      dd count:1
      dda count:1
      de count:1
      dfd count:2
      wer count:1
      dr count:1
    */

    Multiset不是Map

      需要注意的是Multiset不是一个Map<E,Integer>,尽管Multiset提供一部分类似的功能实现。其它值得关注的差别有:
      Multiset中的元素的重复个数只会是正数,且最大不会超过Integer.MAX_VALUE。设定计数为0的元素将不会出现multiset中,也不会出现elementSet()和entrySet()的返回结果中。
      multiset.size() 方法返回的是所有的元素的总和,相当于是将所有重复的个数相加。如果需要知道每个元素的个数可以使用elementSet().size()得到.(因而调用add(E)方法会是multiset.size()增加1).
      Multiset 支持添加、移除多个元素以及重新设定元素的个数。执行setCount(element,0)相当于移除multiset中所有的相同元素。
      调用multiset.count(elem)方法时,如果该元素不在该集中,那么返回的结果只会是0。

  • 相关阅读:
    Using Change Management and Change Control Within a Project
    swift3.0 label改变行间距
    swift清理缓存
    Alamofire的get请求,post请求,以及上传字典
    swift跳转时隐藏tabbar,跳回时显示
    swift获取当前的Version
    swift回收键盘
    OC中常用的设计模式
    关于iOS多线程
    理解 : UDID、UUID、IDFA、IDFV
  • 原文地址:https://www.cnblogs.com/liang1101/p/13659196.html
Copyright © 2020-2023  润新知