guava -- 集合API认识

Java——初始guava(1) 定位:增强 JDK 能力,提供 Google 内部项目验证的最佳实践特点填补 JDK 功能空白(如不可变集合、多维集合)强调代码健壮性(如强制空值检查Optional高性能优化(如缓存工具比快 30%+)开发效率提升(减少模板代码)填补 JDK 空白:提供Multimap等 JDK 缺失的集合类型工程最佳实践:不可变集合/空安全设计等 Google 生产级方案性能优化:缓存/集合工具等高性能实现代码简洁:减少如的模板代码。 阅读详情

1、简化工作,简化集合的创建和初始化

api: http://tool.oschina.net/apidocs/apidoc?api=guava

1)集合创建:

       j'd'k写法:

Map<String, Map<String, String>> map = new HashMap<String, Map<String,String>>();
List<List<Map<String, String>>> list = new ArrayList<List<Map<String,String>>>();
guava的写法:
Map<String, Map<String, String>> map = Maps.newHashMap();
List<List<Map<String, String>>> list = Lists.newArrayList();
      guava写法:
List<Person> personList= Lists.newLinkedList();
Set<Person> personSet= Sets.newHashSet();
Map<String,Person> personMap= Maps.newHashMap();
Integer[] intArrays= ObjectArrays.newArray(Integer.class,10);

 


2)集合初始化:
     jdk写法:

Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
set.add("three");
guava的写法:
Set<String> set = Sets.newHashSet("one","two","three");
List<String> list = Lists.newArrayList("one","two","three");
Map<String, String> map = ImmutableMap.of("ON","TRUE","OFF","FALSE");
     guava写法:
List<Person> personList2= Lists.newArrayList(new Person(1, 1, "a", "46546", 1, 20),
new Person(2, 1, "a", "46546", 1, 20));
Set<Person> personSet2= Sets.newHashSet(new Person(1,1,"a","46546",1,20),
new Person(2,1,"a","46546",1,20));
Map<String,Person> personMap2= ImmutableMap.of("hello",new Person(1,1,"a","46546",1,20),"fuck",new Person(2,1,"a","46546",1,20));

2、不变性,很大一部分是google集合提供了不变性。
不变对比可变:数据不可变、线程安全、不需要同步逻辑、可以被自由地共享、容易设计和实现、内存和时间高效。

不变对比不可修改:google的不变被确保真正不可变,而不可修改实际上还是可以修改数据的。

如下:

jdk版本:

Set<Integer> data = new HashSet<Integer>();
data.addAll(Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80));
Set<Integer> fixedData = Collections.unmodifiableSet(data); // fixedData - [50, 70, 80, 20, 40, 10, 60, 30]
data.add(90); // fixedData - [50, 70, 80, 20, 40, 10, 90, 60, 30]

guava版本:
如何创建不可变的集合:
ImmutableSet<Integer> set1 = ImmutableSet.of(10, 20, 30, 40, 50);
// 使用copyOf方法
ImmutableSet<Integer> set2 = ImmutableSet.copyOf(set1);
// 使用builder方法:
ImmutableSet<Integer> set3 = ImmutableSet.<Integer>builder().addAll(set1) .add(60) .add(70).add(80).build();

ImmutableList<Integer> list1 = ImmutableSet.of(10, 20, 30, 40, 50);
// 使用copyOf方法
ImmutableList<Integer> list2 = ImmutableSet.copyOf(list1);
// 使用builder方法:
ImmutableList<Integer> set3 = ImmutableSet.<Integer>builder().addAll(list1) .add(60) .add(70).add(80).build();

ImmutableMap<Integer,Integer> map1 = ImmutableMap.of(1,10,2, 20,3, 30,4, 40,5, 50);
// 使用copyOf方法
ImmutableMap<Integer,Integer> map2 = ImmutableMap.copyOf(map1);
// 使用builder方法:
ImmutableMap<Integer,Integer> map3 = ImmutableMap.<Integer,Integer>builder().putAll(set1) .put(6,60) .put(7,70).put(8,80).build();

3、新的集合类型
guava API提供了有用的新的集合类型,协同已经存在的java集合工作得很好,分别是MultiMap、MultiSet、Table、BiMap、ClassToInstanceMap。

1)MultiMap:一种key可以重复的map,子类有ListMultimap和SetMultimap,对应地通过key分别得到list和set。

Multimap<String,Person> customersByType = ArrayListMultimap.create();
customersByType.put("abc", new Person("abc",0));
customersByType.put("abc", new Person("abc",1));
customersByType.put("abc", new Person("abc",0));
customersByType.put("abcd", new Person("abcd",4));
for(Person person:customersByType.get("abc")){
    System.out.println(person.getAge());
}
得到的结果将是0 1 0
2)MultiSet:可以增加重复的元素,并且可以统计出重复元素的个数

Multiset<Integer> multiSet = HashMultiset.create();
multiSet.add(10);
multiSet.add(30);
multiSet.add(30);
multiSet.add(40);
System.out.println( multiSet.count(30) ); // 2
System.out.println( multiSet.size() ); // 4
System.out.println( multiSet ); // [40, 10, 30 x 2]

3)Table:相当于有两个key的map
Table<Integer,Integer,Person> PersonTable = HashBasedTable.create();
PersonTable.put(0, 0, new Person("a00",1));
PersonTable.put(0, 1, new Person("a01",12));
PersonTable.put(0, 2, new Person("a02",2));
PersonTable.put(1, 0, new Person("a10",10));
Map<Integer,Person> rowMap = PersonTable.row(1); // 得到行集合
Map<Integer,Person> colMap = PersonTable.column(0); // 得到列集合

4)BiMap:是一个一一映射,可以通过key得到value,也可以通过value得到key
BiMap<Integer,String> biMap = HashBiMap.create();
biMap.put(1, "hello");
biMap.put(2, "world");
biMap.put(3, "!!");
System.out.println(biMap);
System.out.println( biMap.inverse().get("!!") ); // 3

5)ClassToInstanceMap
ClassToInstanceMap提供了一种是用class作为key,对应实例作为value的途径。它定义了T getInstance( Class<T> )和T putInstance( Class<T> T )两个方法,这两个方法消除了元素类型转换的过程并保证了元素在Map中是类型安全的。

ClassToInstanceMap<Person> classToInstanceMap = MutableClassToInstanceMap.create();
classToInstanceMap.putInstance(Person.class, new Person("a1",1));
Person person1 = classToInstanceMap.getInstance(Person.class);

 

转自:https://blog.youkuaiyun.com/u010832551/article/details/74668676

java 提升编程效率的API利器:精通Google Guava库之RangeSet范围集合 RangeSet是 Google Guava 库中的一个接口,用于表示一组非相连的、不可重叠的区间(Ranges)。每个区间可以是连续的或离散的,并且支持多种类型的边界条件(开区间、闭区间等)。RangeSet提供了一系列便捷的方法来处理这些区间集合,使得区间操作变得更加简单和直观。 阅读详情

相关推荐

guava-API文档

guava-API文档

Guava的API使用

1、简化工作,简化集合的创建和初始化: 1)集合创建: 原来的写法: Map> map = new HashMap>(); List>> list = new ArrayList>>();guava的写法: Map> map = Maps.newHashMap(); List>> list = Lists.newArrayList(); List personList= Lists.

让我们荡起双桨的博客 689

guava-23.0-API文档-中文版.zip

赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:23.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Guava 常用 API

super F,?super T> predicate):Iterables类中的tryFind方法,用于找出集合中满足条件的元素,其中传入的第二个参数就是Predicate方法。Splitter 使用示例,下面的 iterable 就是包含了所有被分隔的字符串,同时,onPattern 方法是指传入正则表达式,与正则相匹配的都会被分隔。Collections.unmodifiableXXX方法是视图映射,用该方法生成的集合虽然不能更改,但是用集合更改之后这些集合也会对应的更改。

sekever的博客 1820

guava-17.0-API文档-中文版.zip

赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:guava-17.0.pom; 包含翻译后的API文档:guava-17.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:17.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

guava-18.0-API文档-中文版.zip

赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Java开源工具库使用之Guava

Guava 是谷歌开源的 Java 核心库,它包括很多新的集合类型(如 multimap 和 multiset)、不可变集合、graph 库,以及用于并发、I/O、哈希、缓存、基本类型、字符串等的实用代码!它被广泛应用于谷歌中的大多数 Java 项目中,也被许多其他公司广泛使用。pom 依赖:

十十办文武的博客 4427

ISP工程师实战笔记:5种Demosaic算法优缺点对比(含Hamilton/DFPD代码片段)

本文从ISP工程师实战角度,深入对比了五种经典Demosaic算法的优缺点。文章详细剖析了双线性插值、Hamilton、DFPD、DLMMSE和GBTF等算法的核心思想、实现差异与性能表现,并提供了Hamilton和DFPD算法的关键代码片段。重点探讨了在图像信号处理流水线中,如何根据画质、计算复杂度和功耗等工程约束进行算法选型与权衡。

weixin_42527589的博客 248

Guava库介绍之集合(Collection)相关的API

作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源。 本文是我写的Google开源的Java编程库Guava系列之一,主要介绍Guava中提供的集合(Collection)相关的API。 1. 一些小功能 集合声明更简单 Java中同质的范型集合是一个很大的特色,但是有些时候他们的构造函数有点太啰嗦了,比如: Map&lt...

weixin_33948416的博客 163

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

基于Ansys Fluent 的颗粒分离/过滤解决方案

过滤是指通过特殊装置将颗粒移除,将流体提纯净化的过程。过滤的方式很多,应用的物系也很广泛,固-液、固-气、大颗粒-小颗粒等。

sh_djoin的博客 1852

Guava常用集合操作API

Lists partition 将list集合按指定长度进行切分,返回新的List<List<??>>集合,如下的: import com.google.common.collect.Lists; import org.junit.Test; import java.util.List; public class testList { @Test public void test(){ List<Integer> numList =

JavaEdge全是干货的技术号 1138

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 374

瓜娃(guava)的API快速熟悉使用

1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava BasicUtilities IO API Cache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕上的冰激凌(精华) 高效设计良好的API. 被google的开发者设计,实现和使用。 遵循高效的java这本书的好...

大头之家 1429

读懂 403 Forbidden, the request has been blocked by UCON.:它不是浏览器渲染问题,而是后端安全闸门在拦截

摘要 403 Forbidden 错误表明服务器理解请求但拒绝执行,通常与权限或访问控制有关。当错误信息显示 "blocked by UCON" 时,说明请求被 SAP 体系中的统一连接管控框架拦截。UCON 采用白名单机制限制外部调用,通过记录、评估、强制三阶段流程实施管控。常见触发场景包括 HTTP 服务与通信场景配置不一致、白名单未更新等。排查时应通过 DevTools 确认服务器响应,使用 curl 排除浏览器干扰,并比较不同环境的行为差异。解决方案通常涉及调整配置传输顺序或更新

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 239

RT-DETR改进有效系列目录 | 包含卷积、主干、RepC3、注意力机制、Neck上百种创新机制

Hello,各位读者们好Hello,各位读者,距离第一天发RT-DETR的博客已经过去了接近两个月,这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用,旨在为大家解决为什么用v8的仓库训练的时候模型不收敛,精度差的离谱的问题,我也是成功的找到了解决方案,对于ultralytics仓库进行多处改进从而让其还原RT-DETR官方的实验环境从而达到一比一的效果。同时本人一些讲解视频和包含我所有创新的RT-DETR文档。

Snu77的博客 3万+

Google Guava API学习笔记(2):集合

不可变集合 Immutable Collections  例子  Java代码   public static final ImmutableSet COLOR_NAMES = ImmutableSet.of(     "red",     "orange",     "yellow",     "green",     "blue",     "pu

admin1973的专栏 434

Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记

  最近又将Colmap论文翻出来仔细阅读总结了一下,于是顺便写个博客记录一下。Structure-from-Motion Revisited是当前SOTA的增量式SfM算法Colmap的论文,发表于2016年计算机视觉顶会CVPR。它是增量式SfM里程碑式的作品。 论文地址:https://openaccess.thecvf.com/content_cvpr_2016/papers/Schonberger_Structure-From-Motion_Revisited_CVPR_2016_paper.p

zeeq的博客 1万+

guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava BasicUtilities IO API Cache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕上的冰激凌(精华) 高效设计良好的API. 被google的开发者设计,实现和使用。 遵循高效的java这本书的好的语法实践。 使代码更刻度,简洁,简单。 使用java 1.5的特性, 流行的API,动态的开发 它提供.

u014089832的博客 319

【DRAM存储器六十九】DDR5介绍--2N mode 和 CS Geardown mode

摘要: DDR5内存速率提升至8400MT/s以上时,信号完整性成为关键挑战。JEDEC在JESD79-5B标准中引入2N Mode和CS Geardown Mode两项技术,通过“时间换稳定性”优化时序裕量。2N Mode默认启用,将命令周期延长至两倍时钟周期,增强全局命令稳定性;CS Geardown Mode则针对片选信号(CS_n)降低采样频率,提升局部信号容错能力。两者均需通过特定寄存器配置,适用于高频场景下的性能与稳定性平衡。这些技术为DDR5在高频运行中提供了可靠的时序保障。

highman110的博客 215

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Guava学习笔记(二):Google Guava (瓜娃)的API快速熟悉使用

Google Guava官方教程(中文版) :http://ifeve.com/google-guava/ 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: IntroductionGuava Collection APIGuava Basic UtilitiesIO APICache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕

Mr、温少的博客 1918

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: scala -- 集合简单入门操作
下一篇: win10 安装mysql5.7 解压版本 一共就5步骤
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值