`
raymond.chen
  • 浏览: 1436852 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Multiset的使用

 
阅读更多

Multiset和Set的区别就是可以保存多个相同的对象。在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)所以Multiset占据了List和Set之间的一个灰色地带:允许重复,但是不保证顺序。 

 

Multiset提供多种实现,主要有:

    HashMultiset: 元素存放于HashMap

    LinkedHashMultiset: 元素存放于 LinkedHashMap,即元素的排列顺序由第一次放入的顺序决定

    TreeMultiset:元素被排序存放于TreeMap

    EnumMultiset: 元素必须是 enum 类型

    ImmutableMultiset: 不可修改的 Mutiset

 

常见使用场景:Multiset有一个有用的功能,就是跟踪每种对象的数量,所以你可以用来进行数字统计。 

private static void multiset() {
	ImmutableMultiset<String> set1 = ImmutableMultiset.of("A", "B", "C", "D", "B");
	ImmutableMultiset<String> set2 = ImmutableMultiset.of("D", "B", "B", "B", "D", "D", "E", "F");
	System.out.println(set1); //[A, B x 2, C, D]
	System.out.println(set2); //[D x 3, B x 3, E, F]
	
	//集合数据过滤
	Multiset<String> resultSet = Multisets.filter(set1, new Predicate<String>() {
		@Override
		public boolean apply(String input) {
			return input.indexOf("D") >= 0;
		}
	});
	System.out.println(resultSet); //[D]
	
	//[A, B, C, D]
	System.out.println(set1.elementSet()); //返回去重后的元素集合
	
	set1.elementSet().stream().forEach(e -> {
		System.out.println(e + ": " + set1.count(e)); //显示元素及其计数值
	});
	
	//返回左set计数减去右set计数的结果大于0的元素
	System.out.println(Multisets.difference(set1, set2)); //[A, C]
	System.out.println(Multisets.difference(set2, set1)); //[D x 2, B, E, F]
	
	//交集:返回两个set都存在的、计数值最小的元素
	System.out.println(Multisets.intersection(set1, set2)); //[B x 2, D]
	System.out.println(Multisets.intersection(set2, set1)); //[D, B x 2]
	
	//并集:返回两个set所有的、计数值最大的元素
	System.out.println(Multisets.union(set1, set2)); //[A, B x 3, C, D x 3, E, F]
	System.out.println(Multisets.union(set2, set1)); //[D x 3, B x 3, E, F, A, C]
	
	//计数求和并做并集
	System.out.println(Multisets.sum(set1, set2)); //[A, B x 5, C, D x 4, E, F]
}

 

分享到:
评论

相关推荐

    懒人工具 Almeza MultiSet,软件全自动安装器Pro6.2.0.795(绿色中文)特别版

    在使用Almeza MultiSet时,用户应确保从可靠的来源获取软件,避免潜在的安全风险。同时,了解每个要安装的应用程序的许可条款和隐私政策是必要的,因为MultiSet会自动接受这些条款,用户需要确保自己同意这些条件。 ...

    C++ STL入门教程(7) multimap、multiset的使用

    C++ STL入门教程(7) multimap、multiset的使用 本文主要介绍了C++ STL中multimap和multiset的使用方法,multimap是一对多索引,multiset是多元集合,都是STL容器中非常重要的组件。 一、multimap(一对多索引) ...

    STL容器multiset的使用

    `multiset`内部使用红黑树(Red-Black Tree)作为底层数据结构,保证了插入、删除和查找操作的时间复杂度为O(log n)。与`set`不同的是,当插入相同的元素时,`multiset`会保留多个副本。 **二、multiset的基本操作*...

    oracle cast (multiset()as )用法

    通过实例介绍了 cast(multiset() as) 的使用方法,以处理嵌套表的操作

    C++multiset介绍及详细使用示例(源代码)

    ### C++ `multiset` 介绍及详细使用示例 #### 概述 在C++标准模板库(STL)中,`std::multiset`是一个关联容器,它能够存储可重复的元素,并且这些元素按照指定的排序规则进行排序。`std::multiset`中的元素默认...

    Almeza_MultiSet_6+_Fix_Update

    在实际应用中,Almeza MultiSet的使用方法十分简单。首先,用户需要运行软件并记录一次手动安装的过程,这个过程被称为“创建安装脚本”。然后,当需要再次安装相同软件或者为其他电脑安装时,只需调用这个脚本,...

    Python库 | multiset_multicover-0.4-cp37-cp37m-win_amd64.whl

    在实际使用中,安装`multiset_multicover`库的方法如下: ```bash pip install multiset_multicover-0.4-cp37-cp37m-win_amd64.whl ``` 安装完成后,通过导入库并在代码中调用相关函数,开发者就能在项目中利用`...

    Almeza MultiSet -Windows自动安装软件的工具

    当安装过程结束后,MultiSet会自动生成一个包含所有安装步骤的配置文件(如multiset.ini),并将其与相关的文件(如mainlist.lst)一同保存,供后续的自动安装使用。 在实际应用中,Almeza MultiSet不仅支持安装...

    almeza multiset pro v8.7.6中文注册版.rar

    almeza multiset pro是一款应用程序批量自动安装工具,使用它你不需要编写程序,可以让你从大量的安装程序过程中解放出来。在安装过程中可以实现程序注册信息的自动输入。制作磁盘: 软件 该向导允许您制作一个...

    Python库 | multiset_multicover-0.2-cp310-cp310-win32.whl

    在实际项目中,使用`multiset_multicover`库可能涉及到以下几个步骤: 1. **安装**:按照上述方法使用`pip`安装库。 2. **导入**:在Python代码中导入库,如`import multiset_multicover`。 3. **学习API**:查阅库...

    Almeza MultiSet Pro 7.8.1绿色版

    MultiSet是一款界面简洁的自动程序安装工具。不需要编写程序,用这个程序可以是你从大量的程序安装过程中解放出来。并且可以在安装过程中实现注册信息的输入 Almeza MultiSet Pro 7.8.1绿色版 自动程序安装

    Almeza MultiSet(程序集成自动安装工具)6.7多国语言绿色特别版

    为符合使用习惯,首先将左侧窗格中的Multimedia修改为“多媒体工具”,Internet修改为“网络工具”,Utilities修改为“系统工具”,方法是在相应的选项上单击右键,选择“重命名”。最后再在右侧窗格的例子上右键...

    C++-中的multiset容器

    要使用`multiset`容器,首先需要包含`&lt;set&gt;`头文件,并使用`std`命名空间: ```cpp #include using namespace std; ``` #### 模板参数 `multiset`的模板定义如下: ```cpp template &lt; class Key, class ...

    MultiSet自动程序安装工具

    让你从软件安装中解放,让你从此一键安装千万软件 让你从软件安装中解放,让你从此一键安装千万软件

    Almeza MultiSet Pro 8.7.8 中文版 软件自动安装工具.zip

    Almeza MultiSet Pro 是一个自动安装程序用一个简单和方便的接口。很多时候,它需要花费大量的时间,用户在安装操作系统后,安装必要的程序。并在同一时间,用户需要更换光盘的CD-ROM和DVD-ROM驱动器,输入注册数据...

    STL_multiset和STL_set–算法–笔记

    STL_multiset 方法:multisetst; 定义了一个multiset变量st,st里面可以存放T类型数据,并且能自动排序。开始st为空 排序规则:表达式”a&lt;b为true,则a排在b前面 可用的方法 目的 格式 添加元素 st.insert ...

    C++模板(vector、map、multimap、set、multiset)

    "set和multiset的综合示例.doc"会讲解如何使用`set`和`multiset`来处理各种数据结构问题。"vector综合示例.doc"会深入讲解`vector`的各种操作和应用场景。"multimap和map的示例.doc"则会详细介绍如何使用`map`和`...

    Python库 | multiset_multicover-0.3-cp37-cp37m-win32.whl

    在本例中,我们关注的是名为"multiset_multicover"的一个Python库,版本为0.3,它以whl(Wheel)格式提供,这是一种预编译的Python软件包格式,方便用户直接安装。 `multiset_multicover`库主要用于处理多重集...

    multiset:Java中的多集

    Java中的多集您只需要一个文件: : 因为我使用的是SpotBugs,所以有spotbugs-annotations-3.1.0.jar。 但是您也可以删除这些注释。 我的博客: :

    Set:Swift中Multiset和PredicateSet的实现

    Multiset ( 1 , 2 , 3 ) + Multiset ( 3 , 4 , 5 ) // == Multiset(1, 2, 3, 3, 4, 5) // Difference Multiset ( 1 , 2 , 3 ) - Multiset ( 2 , 3 ) // == Multiset(1) // Intersection Multiset ( 1 , 2 , 3 ) & ...

Global site tag (gtag.js) - Google Analytics