集合 -- 4




概述jdk 为我们提供了各式各样的容器,用来解决不同场景下的集合问题,但很多时候,我们需要维护的集合是连续跨度的范围,甚至是多段范围跨度的交集、并集,jdk 的容器就很难去支持了Guava 提供了 Range 类型,用来定义连续跨度的范围边界,并且这个连续跨度是一个可以比较的类型在此基础上,Guava 还提供了 RangeSet、RangeMap 实现多段范围边界集合的维护,在例如营业时间、允许的范围区间等问题的处理上,提供了前所未有的方便性一个 Range 对象定义了一段区间,对于一个区间,数学上有开区间和闭区间的区分,Range 的创建方法同样提供了对应的构造方式: 区间的创建Range 对象创建方法区间创建方法(a..b)open(C, C)[a..b]closed(C, C)[a..b)closedOpen(C, C)(a..b]openClosed(C, C)(a..+∞)greaterThan(C)[a..+∞)atLeast(C)(-∞..b)lessThan(C)(-∞..b]atMost(C)(-∞..+∞)all() 示例:Range.closed("left", "right"); //字典序
#java    #range    #集合    #guava   
概述有时我们需要维护一个双向映射,也就说,有时我们需要一个 key-value 的集合的同时还需要一个 value-key 的集合,那么,为了解决这个问题,我们需要维护两个 Map:Map<Long, String> fruitIdToName = new HashMap<>(); Map<String, Long> fruitNameToId = new HashMap<>(); fruitIdToName.put(2L, "apple"); fruitIdToName.put(3L, "banana"); fruitNameToId.put("apple", 2L);  上面的代码维护了两个 HashMap,分别是水果 Id 到水果名称的映射,和水果名称到水果 Id 的映射然而,维护两个 HashMap 的成本是很高的,你会发现在例子中,我们将无法通过 fruitIdToName 中存在的 banana 值作为 key 查找到 fruitNameToId&n
#技术帖    #龙潭书斋    #java    #集合   
概述此前我们曾经介绍过,java 提供了丰富的容器类来解决一组对象的管理问题:Collection 及其相关实现的容器简介及用法Map 简介及用法但是对于复杂的情况,jdk 提供的容器类还是显得有些不足,guava 引入了一系列新的集合类,来扩充 JDK 集合框架,令人欣慰的是,guava 的集合接口完全遵循了 jdk 的思想和理念 众所周知,jdk 的 Set 是一个继承自 Collection 的接口,用于实现不重复的元素的集合,但有时,我们是很需要一个值能够重复的 Set 的,最常见的需求就是我们需要集合中不重复的元素的集合,那么我们需要一个 Set,但是我们还需要知道集合中各个元素的出现次数,那么 Set 就无法做到了,仅适用 List 也是难以满足的,非要实现的话,代码的复杂度就会变得很高而不易于维护Guava 提供的 Multiset 解决了上述问题,简单地说,Multiset 提供了一个元素可重复的 Set,事实上,这在 C++ 的 STL 中早已有所提供,大概 
#技术帖    #龙潭书斋    #java    #jdk   

200x200


引言工作之余,放眼窗外,陷入一阵沉思记得小时候,还在读小学的我就听身边的同学神秘兮兮的说“埃及金字塔是外星人给建的,最大的那座他的高度乘以一个整数刚好是地球和太阳之间的距离”,当时觉得好神奇等到大约初

#读后感    #随笔    #古希腊    #质子链反应   



京ICP备15018585号