guava
文章平均质量分 70
其实我系个好人
外修语言,内修算法;以数据为根,算天算地算自己。
展开
-
Guava使用之MultiSet
Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象。在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)所以Multiset占据了List和Set之间的一个灰色地带:允许重复,但是不保证顺序。 实际开发中,经常会需要原创 2017-09-17 13:18:48 · 559 阅读 · 0 评论 -
Guava使用之Ordering强大的流畅风格比较器
排序器(Ordering)是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。从实现上说,Ordering实例就是一个特殊的Comparator实例。Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。常见的排序器可以原创 2017-09-17 13:37:49 · 501 阅读 · 0 评论 -
Guava使用之Preconditions
Guava的Preconditions内置了很多前置条件判断方法,这些判断方法经常放在方法的最前面,用来检查入参的条件是否符合,它可以使代码变得更整洁。每个方法都有三个变种: 1. 没有额外的参数,抛出的异常中没有错误信息 2. 有一个object对象作为额外参数,抛出的异常中以object.toString()作为错误信息 3. 有一个String作为额外参数,附加不定数量的object对象原创 2017-09-17 13:57:51 · 735 阅读 · 0 评论 -
Guava使用之Splitter
Splitter:在Guava官方的解释为: Extracts non-overlapping substrings from an input string, typically by recognizing appearances of a separator sequence. This separator can be specified as a single character, fi原创 2017-09-17 14:12:05 · 1104 阅读 · 0 评论 -
Guava使用之Table
当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。 为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。@Testpublic void testTable(){ Table<String,原创 2017-09-17 14:21:35 · 1031 阅读 · 0 评论 -
Guava使用之BiMap
通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是一些应用场景中需要我们通过value获取key。这个时候如果用传统的方法就需要维护两个map,并且需要保持他们之间的同步。对于值已经存在的情况,会变得非常混乱。例如:Map nameToId = Maps.newHashMap();Map idToName = Maps.newHashMap();&n原创 2017-09-03 16:48:06 · 1420 阅读 · 0 评论 -
Guava使用之Immutable collection
在我们的很多需求中,特别是并发的情况下,我们不想让任何人修改我们的数据集合,这个时候就用到不可变集合,JDK里面也提供了Collections.unmodifiablexxx方法把集合包装成不可变形式,但是他有很多缺点,比如: - 笨重而且累赘:不能舒适地用在所有想做防御性拷贝的场景; - 不安全:要保证没人通过原集合的引用进行修改,返回的集合才是事实上不可变的; - 低效:包装过的集合仍然原创 2017-09-03 17:17:07 · 398 阅读 · 0 评论 -
Guava使用之MultiMap
在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业务逻辑处理。例如:private class StudentScore{ int CourseId; int score;}private Map<String, List<StudentScore>> StudentScoreM原创 2017-09-03 17:46:43 · 738 阅读 · 0 评论 -
Guava使用之Throwables异常简化、错误传播和检查
任何人都不敢说自己的代码没有bug,所以程序抛异常是再经常不过的事情,有时候,你会想把捕获的exception抛到上一个try/catch块。对于 RuntimeException 和 Error 尤为如此,它们不需要try/catch 块,但可能被其他的 try/catch 块无意捕获。你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeE原创 2018-03-05 16:20:17 · 589 阅读 · 0 评论