Google Guava集合1: Multisets

本文介绍了Guava库中的Multiset,一种允许元素重复但不保证顺序的数据结构。通过对比List和Set,突出了Multiset在计数重复元素方面的优势,并提供了简单的示例代码。
[b]Google Guava: Multisets[/b]


我们继续研究Guava,这次我将介绍Multiset,虽然这个不经常使用,但是还是有必要介绍一下。

[b]Multiset是什么?[/b]
顾名思义,Multiset和Set的区别就是可以保存多个相同的对象

[b]它和List有什么区别?[/b]
在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)

所以Multiset占据了List和Set之间的一个灰色地带:允许重复,但是不保证顺序。

注意:这种集合在apache commons collections中也被称作“Bag”.

[b]怎么使用?[/b]
Multiset有一个有用的功能,就是跟踪每种对象的数量,所以你可以用来进行数字统计。

以前这么做统计:
Map<MyClass,Integer> objectCounts = new HashMap<MyClass,Integer>();

public void incrementCount(MyClass obj) {
Integer count = objectCounts.get(obj);
if (count == null) {
objectCounts.put(obj,0);
} else {
objectCounts.put(obj,count++);
}
}


public int getCount(MyClass obj) {
Integer count = objectCounts.get(obj);
if (count == null) {
return 0;
} else {
return count;
}
}

有点麻烦?好吧,试试Multiset:
Multiset<MyClass> myMultiset = HashMultiset.create();

MyClass myObject = new MyClass();
myMultiset.add(myObject);
myMultiset.add(myObject); // add it a second time.

System.out.println(myMultiset.count(myObject)); // 2
myMultiset.remove(myObject);
System.out.println(myMultiset.count(myObject)); // 1


简单多了吧,其实不仅可以一次添加删除一个,也可以一次多个:
Multiset<MyClass> myMultiset = HashMultiset.create();

MyClass myObject = new MyClass();
myMultiset.add(myObject,5); // Add 5 copies of myObject
System.out.println(myMultiset.count(myObject)); // 5
myMultiset.remove(myObject,2); // remove 2 copies
System.out.println(myMultiset.count(myObject)); // 3


是不是很有用啊,其实Multiset还有很多其他实现,建议你读一下它的API说明:[url]http://docs.guava-libraries.googlecode.com/git-history/v9.0/javadoc/com/google/common/collect/Multiset.html[/url]
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
### 查找或下载指定版本的 Guava 库 当遇到 `Missing artifact com.google.guava:guava:jar:18.0` 的错误提示时,这通常意味着项目无法找到所需的 Guava 版本。对于希望查找或下载特定版本(如 24.0)的 Guava 库的情况,可以采取以下方法: #### 使用 Maven 中央仓库获取依赖项 Maven 是 Java 生态系统中最常用的构建工具之一,它允许开发者通过 POM 文件声明项目的依赖关系。为了确保能够成功下载并集成 Guava 24.0 到项目中,在 `pom.xml` 文件内应正确配置如下所示的内容[^1]。 ```xml <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>24.0-jre</version> </dependency> ``` 需要注意的是,针对不同环境下的应用(Java SE 或 Android),应当选用合适的分类器(classifier)。上述例子中的 `-jre` 表示该库适用于标准版 JVM 上运行的应用程序;如果目标平台为 Android,则可能需要移除此部分以适应更广泛的兼容性需求。 另外,考虑到某些情况下本地镜像站点可能存在同步延迟等问题,建议确认所使用的仓库地址是最新的,并且包含了必要的索引数据以便于快速定位资源位置。例如,可以通过添加更多可靠的远程存储库来提高成功率,如 JCenter 和 Maven Central Repository[^2]。 #### 配置 Gradle 构建脚本 对于采用 Gradle 进行管理的项目而言,可以在 `build.gradle` 文件里加入相应的依赖描述以及扩展可用的插件源列表,从而实现相同的效果。具体操作方式如下所示: ```groovy repositories { google() mavenCentral() } dependencies { implementation 'com.google.guava:guava:24.0-jre' } ``` 以上设置不仅限定了所需 Guava 库的具体版本号,同时也指明了可以从哪些地方尝试检索对应的二进制文件。这样做有助于避免因单一渠道故障而导致整个编译流程中断的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值