Multiset

Multiset 虽然带了个set但是却允许重复元素,与set相同的是不保证元素顺序。

使用场景:获取文章中单词的出现次数

        String[] wordArr = new String[]{"a","b","c","a","a","c","e"};
List<String> wordsList = Arrays.asList(wordArr);
Multiset<String> wordsMultiset = HashMultiset.create();
wordsMultiset.addAll(wordsList); for(String key:wordsMultiset.elementSet()){
System.out.println(key+" count:"+wordsMultiset.count(key));
}
//e count:1
//b count:1
//c count:2
//a count:3

Multimap

Multiset 实现了类似 Map<K, List> 的数据结构

        Multimap<String, Integer> multimap = ArrayListMultimap.create();
for (int i = 0; i < 10; i++) {
Random random = new Random();
multimap.put("1", random.nextInt());
}
System.out.println(multimap.size()); //10
System.out.println(multimap.keys()); //[1 x 10]
for (int i = 0; i < 5; i++) {
Random random = new Random();
multimap.put("2", random.nextInt());
}
System.out.println(multimap.size()); //15
System.out.println(multimap.keys()); //[2 x 5, 1 x 10]
for (String x : multimap.keySet()) {
System.out.println(x+" : ");
Map<String, Collection<Integer>> listMap = multimap.asMap();
Collection<Integer> collection = listMap.get(x);
for (Integer i : collection) {
System.out.println(i);
}
}

BiMap

BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。 BiMap 要求Value是唯一的,Value重复会抛出错误

        BiMap<Integer,String> bimap = HashBiMap.create();
bimap.put(1,"1");
bimap.put(2,"2");
bimap.put(3,"3");
bimap.put(2,null); BiMap<String,Integer> valueMap = bimap.inverse();
System.out.println(valueMap.get("3")); //3 bimap.forcePut(4,"1"); //强制插入会覆盖重复Value的Key
System.out.println(valueMap.get("1")); //4

Table

Table 实现了类似Map<rowId, Map<columId, Value>> 及 可以 通过row 来查找也可以通过 colum来查找

        Table<Integer, String,Integer> table = HashBasedTable.create();
table.put(1,"lilei",23);
table.put(2,"hanmeimei",24);
table.put(3,"lilei",3);
table.put(3,"lily",18); Map<String, Integer> row = table.row(3);
System.out.println(row); //{lily=18, lilei=3}
Map<Integer, Integer> column = table.column("lilei");
System.out.println(column); //{1=23, 3=3}

RangeSet

RangeSet描述了一组不相连的、非空的区间。当把一个区间添加到可变的RangeSet时,所有相连的区间会被合并,空区间会被忽略。

    RangeSet<Integer> rangeSet = TreeRangeSet.create();
rangeSet.add(Range.closed(1, 5));
System.out.println(rangeSet); //[[1‥5]] rangeSet.add(Range.closedOpen(5, 10));
System.out.println(rangeSet); //[[1‥10)] rangeSet.add(Range.closedOpen(8, 10));
System.out.println(rangeSet); //[[1‥10)] rangeSet.add(Range.openClosed(10, 15));
System.out.println(rangeSet); //[[1‥10), (10‥15]] rangeSet.remove(Range.open(8, 12));
System.out.println(rangeSet); //[[1‥8], [12‥15]]

最新文章

  1. C#递归遍历子目录与子目录中的文件
  2. *POJ 1222 高斯消元
  3. python 进程和线程
  4. Ubuntu .deb包安装方法
  5. 20个编写现代CSS代码的建议
  6. AES加密补位填充的一个问题
  7. python线程锁
  8. leetcode105:Construct Binary Tree from Preorder and Inorder Traversal
  9. TYVJ P1083 分糖果 Label:bfs
  10. delphi 调用百度地图WEBSERVICE转换GPS坐标 转
  11. JQuery图片滑动插件
  12. 【USACO 1.1.1】你的飞碟在这儿
  13. 开子线程下载图片,回到主线程刷新UI步骤
  14. size_t, ptrdiff_t, size_type, difference_type
  15. API得到Windows版本
  16. Sptringboot 添加子项目
  17. SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
  18. HDU 1517 (累乘 找规律)
  19. flex 布局 出滚动条的操作
  20. AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群

热门文章

  1. 可视化iOS应用程序开发的6个Xcode小技巧
  2. struts2从浅至深(三)拦截器
  3. Codeforces777E. Hanoi Factory 2017-05-04 18:10 42人阅读 评论(0) 收藏
  4. 软件工程—WC功能实现 (JAVA)
  5. 基于注解方式@AspectJ的AOP
  6. CAS实战の遇到的问题
  7. ABP 基础设施层——集成 NHibernate
  8. Autofac创建实例的方法总结[转]
  9. Spring Boot 应用系列 2 -- Spring Boot 2 整合MyBatis和Druid
  10. Ajax 访问 或 获取 IIS 虚拟目录