Guava使用之MultiSet

Microduck机器鸭开源AI项目:本地部署与模型微调实战指南 开源AI模型的本地化部署与定制化训练正成为开发者关注的技术趋势。与依赖云端API的在线服务不同,本地部署允许用户将模型权重下载至自有GPU环境,通过命令行或WebUI完成推理、批量任务处理及API集成,在数据隐私、离线使用和接口稳定性方面具备天然优势。模型微调则基于预训练权重,利用领域数据训练特定任务,从而提升生成质量与业务适配度。这一技术路径广泛应用于内容生成、智能对话、自动标注等场景,尤其适合消费级显卡开发者、数据敏感型团队及二次开发研究者。Microduck(机器鸭)作为近期预售火爆的开源项目,围绕“ 阅读详情

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

实际开发中,经常会需要统计某个元素的出现次数,常见的普通实现就是用一个遍历一遍元素列表,用map保存每个key word的次数,如:

@Test
public void testWordCount(){
    String strWorld="wer|dffd|ddsa|dfd|dreg|de|dr|ce|ghrt|cf|gt|ser|tg|ghrt|cf|gt|" +
            "ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr|wer|dffd|ddsa|dfd|dreg|de|dr|" +
            "ce|ghrt|cf|gt|ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr";
    String[] words=strWorld.split("\\|");
    Map<String, Integer> countMap = new HashMap<String, Integer>();
    for (String word : words) {
        Integer count = countMap.get(word);
        if (count == null) {
            countMap.put(word, 1);
        }
        else {
            countMap.put(word, count + 1);
        }
    }
    System.out.println("countMap:");
    for(String key:countMap.keySet()){
        System.out.println(key+" count:"+countMap.get(key));
    }
}

这种写法很笨拙,也容易出错,并且不支持同时收集多种统计信息,如总词数。我们可以做的更好。
用Multiset来写的话可以简单些,如:

@Test
public void multisetDemo(){
    HashMultiset<String> hashMultiset=HashMultiset.create();
    String strWorld="wer|dffd|ddsa|dfd|dreg|de|dr|ce|ghrt|cf|gt|ser|tg|ghrt|cf|gt|" +
            "ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr|wer|dffd|ddsa|dfd|dreg|de|dr|" +
            "ce|ghrt|cf|gt|ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr";
    String[] words=strWorld.split("\\|");
    List<String> wordList=new ArrayList<String>();
    for (String word : words) {
        wordList.add(word);
    }
    hashMultiset.addAll(wordList);
    for(String key:hashMultiset.elementSet()){
        System.out.println(key+" count:"+hashMultiset.count(key));
    }
}

可以用两种方式看待Multiset:

  • 没有元素顺序限制的ArrayList
  • Map<E, Integer>,键为元素,值为计数

当把Multiset看成普通的Collection时,它表现得就像无序的ArrayList:

  • add(E)添加单个给定元素
  • iterator()返回一个迭代器,包含Multiset的所有元素(包括重复的元素)
  • size()返回所有元素的总个数(包括重复的元素)

当把Multiset看作Map<E, Integer>时,它也提供了符合性能期望的查询操作:

  • count(Object)返回给定元素的计数。HashMultiset.count的复杂度为O(1),TreeMultiset.count的复杂度为O(log n)。
  • entrySet()返回Set<Multiset.Entry<E>>,和Map的entrySet类似。
  • elementSet()返回所有不重复元素的Set<E>,和Map的keySet()类似。
  • 所有Multiset实现的内存消耗随着不重复元素的个数线性增长。

需要注意的是:
TreeMultiset在判断元素是否相等时,与TreeSet一样用compare,而不是Object.equals。
Multiset.addAll(Collection)可以添加Collection中的所有元素并进行计数,这比用for循环往Map添加元素和计数方便多了。

MultiSet主要方法:

  • add(E element) :向其中添加单个元素
  • add(E element,int occurrences) : 向其中添加指定个数的元素
  • count(Object element) : 返回给定参数元素的个数
  • remove(E element) : 移除一个元素,其count值 会响应减少
  • remove(E element,int occurrences): 移除相应个数的元素
  • elementSet() : 将不同的元素放入一个Set中
  • entrySet(): 类似与Map.entrySet 返回Set<Multiset.Entry>。包含的Entry支持使用getElement()和getCount()
  • setCount(E element ,int count): 设定某一个元素的重复次数
  • setCount(E element,int oldCount,int newCount): 将符合原有重复个数的元素修改为新的重复次数
  • retainAll(Collection c) : 保留出现在给定集合参数的所有的元素
  • removeAll(Collectionc) : 去除出现给给定集合参数的所有的元素
探索Vortex开源GPGPU:RISC-V SIMT架构(2),指令Decode 本文分析了Vortex RISC-V内核的Decode模块设计。文章详细介绍了指令译码过程,包括操作码、功能码和寄存器字段的提取,以及不同类型指令(R/I/S/B/U/UJ)的立即数处理。重点阐述了基于操作码和功能码的分层译码逻辑,包括ALU运算、分支跳转、系统调用等指令的译码规则。此外,还描述了定制指令的处理机制以及与调度器的握手协议。Decode模块通过组合逻辑实现快速译码,并将结果传递给下级Issue模块,同时协调指令流控制。 阅读详情

相关推荐

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 149

guava HashMultiset 的使用说明

这个集合的特殊本领:统计集合中各个元素的个数 具体看使用实例 package com.lxk.guavaTest; import com.google.common.collect.HashMultiset; import com.google.common.collect.Lists; import com.lxk.util.PrintUtil; import java.util.Se...

请叫我大师兄 1112

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

Guava系列:HashMultiset使用方法

目录 场景 demo 场景 HashMultiset允许重复元素,并计算出现的次数 demo package com.nio4444.demo; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; public class MultisetDemo { public static void main(String[] args) { M

NIO4444 957

从零到一:OptimizePI Pre-layout PDN前仿真实战指南

本文详细介绍了如何使用OptimizePI进行电源完整性(PDN)前仿真,从软件安装配置到元器件建模、去耦电容配置及仿真参数设置,提供了实战技巧和常见问题排查指南。通过OptimizePI的Pre-layout仿真,工程师可以在PCB布局前优化电源分配网络,显著提升设计效率并降低成本。

weixin_28304023的博客 505

Wan 3.0提示词实战:从抄作业到改作业的完整技巧

AI视频生成中,提示词是决定成片质量的核心。视频模型依赖于文字约束来定义运动轨迹、镜头语言与物理合理性,提示词工程因此成为连接创意与技术的关键。本文从提示词的结构、资源获取、优化方法入手,结合Wan 3.0的模型特点,梳理了从官方模板到社区案例的实战路径,并强调运动一致性、风格词堆砌等常见问题。通过分解主体、动作、镜头等维度,帮助创作者快速找到适配的提示词,提升视频生成的稳定性与惊喜感。

weixin_29483277的博客 347

guava中Multiset、HashMultiset使用分析

guava包中提供了Multiset接口,这个接口没有实现java.util.Set接口,Set接口规定里面是不能够放入重复的元素,如果放入重复元素会被覆盖掉的;然而Multiset接口却是可以放入重复元素的,Set接口中的元素是[1,2,3],Multiset中确可以[1✖️2,2✖️3,3✖️3]来表示多个相同的元素。 创建Multiset对象 Multiset&amp;amp;amp;lt;Intege...

OceanSky的专栏 3113

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 909

java实用必备工具库

java实用必备工具库,高效率完成开发 很多对编程感兴趣的朋友不知道是否会有这样的感触,敲了很多年代码,才发现有很多工具类库,这些工具类库可以大大的简化代码量,从而提升开发效率,下面和大家分享一下我所了解的工具类库。 1. java自带工具方法 1.1 List集合拼接成以逗号分隔的字符串 @Test public void test1(){ //如何把list集合拼接成以逗号分隔的字符串a,b,c (---Arrays.asList:该方法是将数组转化成List集合的方法)

weixin_38359768的博客 515

996引擎 - 读写变量性能测试

单轮100万次读写,取3轮平均耗时(毫秒),有效读取率均为100%,数值越小性能越优。

灵台方寸山斜月三星洞 244

32、生物医学中的多模态拉曼散射成像技术

本文综述了多模态拉曼散射成像技术在生物医学领域的应用,重点探讨其在肿瘤研究、癌症无创诊断和组织功能分析中的前沿进展。通过结合自发拉曼、相干拉曼散射(CARS/SRS)、光学相干断层扫描(OCT)、荧光寿命成像(FLIM)及多光子显微技术(TPEF/SHG)等多种模态,实现了对细胞和组织的高特异性生化信息与高分辨率形态学特征的同步获取。文章还介绍了多模态SERS纳米探针的设计及其在靶向成像与治疗一体化中的潜力,并系统分析了不同成像方式的操作流程、优势互补性及临床应用场景。最后展望了该技术向小型化、智能化和个性

zzz56的博客 152

C++——map和set(multimap和multiset)

本文详细讲解关联式容器:set,map,multiset,multimap,并使用代码进行演示,希望对小伙伴有帮助!

bang___bang_的博客 1241

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

Guava 之 Multiset

Multiset 是 guava 包下一种新的集合,可以方便的统计集合中重复元素出现的次数。 Multiset 有一下实现类: HashMultiset::元素存放于 HashMap LinkedHashMap:即元素的排列顺序由第一次放入的顺序决定 TreeMultiset:元素被排序存放于TreeMap EnumMultiset::元素必须是 enum 类型 ImmutableMultise...

PZHU_CG_优快云的博客 809

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Guava 心得:Guava 新增集合类型 —— Multiset

Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。Guava中定义的新集合有: Multiset SortedMultiset Multimap ListMultimap SetMultimap BiMap ClassToInstanceMap Table Multiset 集合 Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象。在JDK中

weixin_42073629的博客 419

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《Guava Multiset接口》学习笔记

Multiset接口扩展设置有重复的元素,并提供了各种实用的方法来处理这样的元素在集合中出现。 接口声明 以下是com.google.common.collect.Multiset<E>接口的声明: @GwtCompatible public interface Multiset<E> extends Collection<E> 接口方法 方法继承 此接口继承从以下接口方法:java.u...

hupengfei_shenyang的博客 191

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Guava Multiset接口使用与分析

Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。 Multiset: 把重复的元素放入集合 你可能会说这和 Set 接口的契约冲突,因为 Set 接口的 JavaDoc 里面规定不能放入重复元素。事实上,Multiset 并没有实现 java.util.Set 接口,它更像是

大灰狼的专栏 1万+

Google guava之Multiset简介说明

Google guava之Multiset简介说明

qq_25073223的博客 299

guava: Multiset的使用

guava

amadeus_liu2的博客 301

Guava-Multiset

guava-Multiset传统的单词统计应用Map<String, Integer> counts = new HashMap<String, Integer>(); for (String word : words) { Integer count = counts.get(word); if (count == null) { counts.put(word, 1); }

hjw199089的博客 289

guava multimap 和 multiset的使用

guava multimap 和 multiset的使用multimap和multiset都是可以存储多个重复key的新类型Collection。最近恰好使用到这两个东西,感觉的确很方便。multimap用来处理同样的key的list,如果不使用这个我们就需要使用的是Map Multimap<String, String> myMultimap = ArrayListMultimap.

sutonline的博客 559

java代码之美(5)---guava之Multiset

guava之Multiset 一、概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关。Multiset继承于JDK的Cllection接口,而不是Set接口。它和set最大的区别就是 它可以对相同元素做一个计数的功能,普通的 Set 就像这样 :[car, ship, bike],而 Multiset 会是这样 : [car ...

后端元宇宙 296

java multiset_google guava集合之Multiset

Multiset是什么?Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承的是Collection接口,你可以向Multiset中添加重复的元素,Multiset会对添加的元素做一个计数。它本质上是一个Set加一个元素计数器。Multiset使用示例:packagecn.outofmemory.guava.collection;importcom.go...

weixin_28686915的博客 147

guava之Multiset

可重复set和map,便于计数 可变集合接口 属于JDK还是Guava 不可变版本 Collection JDK ImmutableCollection List JDK ImmutableList Set JDK ImmutableSet SortedSet/NavigableSet JDK Immutab

idealemail的博客 686

Guava新集合-Multiset

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34050005的博客 109

Guava新增集合类型之Multiset

https://www.cnblogs.com/peida/p/Guava_Multiset.html  Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。Guava中定义的新集合有:   Multiset   SortedMultiset   Multimap   ListMultim...

Java_Jsp_Ssh的博客 279
上一篇: Guava使用之MultiMap
下一篇: Guava使用之Ordering强大的流畅风格比较器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值