Guava

介绍

Guava 是来自 Google 的一组核心 Java 库, 包含

  1. 新的集合类型(collections)(例如 multimap 和 multiset)
  2. 不可变集合
  3. 图形库
  4. 并发(concurrency)
  5. I/O
  6. 散列
  7. 缓存(caching)
  8. 基元(primitives support)
  9. 字符串(string processing)

​​Google Guava 提供了很多工具方法, 并不是一个传统意义上的功能库. 比较分散

有jre(jdk8)和 Android 两种风格

  • com.google.guava:guava:31.1-jre 完整功能
  • com.google.guava:guava:31.1-android 精简功能 (移除部分 JDK 依赖,适配 Android 的受限运行时和性能优化需求)

示例

1. partition---将集合分块处理 (分批处理)

java 复制代码
ArrayList<String> testList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15");
Lists.partition(testList, 5).forEach(item->{
  System.out.println(item);
  System.out.println("=========");
});
  • 使用场景:可以去查询数据库的使用in的方式,来控制查询的次数
java 复制代码
List<Long> groupSysSkuIdList = new ArrayList<>();
List<Object> resultList = new ArrayList<>();
//将集合拆分以200个为单位,每个会执行下面forEach的逻辑
Lists.partition(groupSysSkuIdList,200).forEach(item->{
  Example example = new Example();
  //构造查询器,类比MybatisPlus的查询构造器
  example.createCriteria().
    //这里每次用拆分后的idList,用in的方式拆开查询
    .andGroupSysSkuIdIn(item);
  	//最后都加入到结果集合中
  resultList.addAll(xxxMapper.selectByExample(example));
});

2. cartesianProduct---实现集合间 笛卡尔积

java 复制代码
ArrayList<String> listA = Lists.newArrayList("1", "2");
ArrayList<String> listB = Lists.newArrayList("3", "4");
ArrayList<String> listC = Lists.newArrayList("5", "6");

System.out.println(Lists.cartesianProduct(listA, listB,listC));

3. reverse---将元素位置反转

java 复制代码
ArrayList<String> oldList = Lists.newArrayList("1", "2", "3"); System.out.println(oldList); System.out.println(Lists.reverse(oldList));

4. 不可变对象

复制代码
- 初始化速度和查询速度要比可变集合快的;
- 内存占用也比可变集合低 (arrayList 1.5 倍扩容)

5. 分页

将一个可迭代对象(Iterable)按指定大小分割成多个子列表(类似于分块或分页)

java 复制代码
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
// Iterable 是惰性的
Iterable<List<Integer>> partitions = Iterables.partition(numbers, 3);
for (List<Integer> chunk : partitions) {
    System.out.println(chunk);
}
// 每次遍历会重新计算分块,若需重复使用,建议缓存为 List
List<List<Integer>> cachedPartitions = ImmutableList.copyOf(Iterables.partition(numbers, 3));

(待更新)

其他

深拷贝

Guava 不提供深拷贝

  • 浅拷贝

设计哲学​​:Java 倾向于让开发者显式控制拷贝行为(如通过 Cloneable 接口)

java 复制代码
// 浅拷贝示例
int[][] original = {{1, 2}, {3, 4}};
List<int[]> list = Arrays.asList(original); // 浅拷贝
int[][] list2 = Arrays.copyOf(original, original.length); // 浅拷贝
// 修改原数组
original[0][0] = 99;
// 验证
System.out.println(list.get(0)[0]); // 输出 99(同步修改)
System.out.println(list2[0][0]); // 输出 99
  • 深拷贝
    使用三方库 Apache Commons Lang
java 复制代码
// Apache Commons Lang
int[][] deepCopy = SerializationUtils.clone(original);
  • 还有一些别的方法, 但都有明显缺陷:
  1. 手动逐层复制: 性能高,可控性强, but 代码冗长,需处理复杂结构
  2. 序列化/反序列化: 通用性强,适合复杂对象, but 性能低,要求 Serializable
  3. JSON 序列化: 无需 Serializable, but 性能较低,丢失类型信息

数字四舍五入

java 复制代码
Math.ceil(double)  // 天花板; 向上 -1.5 = -1; 不是 cell 细胞
Math.floor(double) // 地板; 向下取整 -1.5 = -2
Math.round(double) // 四舍五入
Integer.parseInt(str)  // 直接舍去小数部分; 负数向上, 正数向下 -1.5 = -1
相关推荐
程序员乐只18 小时前
基于Python+Django+SSM热门旅游景点推荐系统(源码+LW+调试文档+讲解等)/热门旅游地推荐平台/旅游景点推荐软件/热门景点推荐系统/旅游推荐系统/旅游景点热门推荐
spring boot·spring·tomcat·hibernate·java-zookeeper·guava·java-consul
沛沛老爹1 个月前
2025年java总结:缝缝补补又一年?
java·开发语言·人工智能·python·guava·总结·web转型ai
PacosonSWJTU1 个月前
Guava缓存使用入门
java·缓存·guava
invicinble1 个月前
Google Guava工具类机制
guava
写代码的小阿帆1 个月前
Java本地缓存技术——Guava、Caffeine
java·缓存·guava
weixin_515069661 个月前
1.guava-retrying 重试框架
java·框架·guava·java常用api
山河亦问安1 个月前
令牌桶算法的限流组件实现
guava
聊天QQ:276998851 个月前
多智能体分布式模型预测控制在编队中的奇幻之旅
guava