zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    css 模块化
    zookeeper集群-solrcloud集群
    Ansible
    Haproxy
    Saltstack数据系统
    Saltstack入门
    DNS(bind)添加A、CNAME、MX、PTR记录、智能DNS(ACL)
    主从同步DNS(BIND)
    单台DNS服务器搭建(BIND)
    python2.7多线程的批量操作远程服务器
  • 原文地址:https://www.cnblogs.com/liang1101/p/13659196.html
Copyright © 2011-2022 走看看