![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
guava
guava源码分析
dancheng_work
在时间允许的情况下,源码是最好的开发文档。
展开
-
Guava-Collections2源码解析
Guava-Collections2类的源码解析原创 2022-07-15 21:22:58 · 379 阅读 · 1 评论 -
Guava源码解析十四:BiMap源码解析
BiMap是一个双向关联的数据结构,而它对key和value严格的保证唯一性。如果使用put方法添加相同的value值或key值则会抛出异常:java.lang.IllegalArgumentException,如果使用forcePut方法添加则会覆盖掉原来的value值。由上图可以看到BiMap的实现类有很多,我就使用HashBiMap对BiMap进行分析 成员变量priv...原创 2018-12-26 09:43:07 · 736 阅读 · 0 评论 -
Guava源码解析十三:Multimap源码解析
Multimap相对于传统的Map区别在于,Multimap是一对多的一个数据结构,对于Multimap的解析用HashMultimap进行解析,看一下HashMultimap的类结构图:HashMultimap构造器因为他的构造方法是私有的,所有他会拥有静态方法构造器:public static <K, V> HashMultimap<K, V> cre...原创 2018-12-26 09:27:21 · 447 阅读 · 0 评论 -
Guava源码解析十二:Multiset源码解析
对于Multiset集合可以存储重复的值,他的强大之处是他的同一个值个数统计功能。实现类为HashMulitset类,他的继承关系图为:从Multiset接口开始分析源码:public interface Multiset<E> extends Collection<E> { //返回给定参数元素的个数 int count(@Nullable ...原创 2018-12-26 09:23:36 · 317 阅读 · 0 评论 -
Guava源码解析十一:Sets源码解析
功能函数 创建一个不可变的set 1.ImmutableSet<E> immutableEnumSet(E anElement, E... otherElements) 2.ImmutableSet<E> immutableEnumSet(Iterable<E> elements) 创建一个HashSe...原创 2018-12-26 09:07:44 · 930 阅读 · 0 评论 -
Guava源码解析十:Maps源码解析
构造方法private Maps() {}私有的构造方法,可以看到这是一个真正的功能函数,下面对其函数进行分析功能函数 返回一个不可变Map 1.ImmutableMap<K, V> immutableEnumMap(Map<K, ? extends V> map) 创建一个HashMap ...原创 2018-12-26 08:56:06 · 1132 阅读 · 1 评论 -
Guava源码解析九:Lists源码解析
构造方法private Lists() {}私有的构造方法,可以看到这是一个真正的功能函数,下面对其函数进行分析 功能函数首先根据每一个函数的更能进行了分类: 创建ArrayList方法 newArrayList() newArrayList(E... elements) newArrayList(Iterable<? ...原创 2018-12-25 20:10:21 · 885 阅读 · 0 评论 -
Guava源码解析八:Preconditions源码解析
提供静态方法来检查方法或构造函数,被调用是否给定适当的参数。它检查的先决条件。其方法失败抛出IllegalArgumentException。对于Preconditions类的静态方法可以分为三大类:1.对null的处理2.对真假的处理3.对数组下标是否符合的处理 一、对null的处理public static <T> T checkNotN...原创 2018-12-25 19:42:36 · 191 阅读 · 0 评论 -
Guava源码解析七:CharMatcher源码解析
一个处理字符串的类实现类 ANY 匹配任何字符 ASCII 匹配是否是ASCII字符 BREAKING_WHITESPACE 匹配所有可换行的空白字符(不包括非换行空白字符,例如"\u00a0") DIGIT 匹配ASCII数字 ...原创 2018-12-25 19:40:15 · 288 阅读 · 0 评论 -
Guava源码解析六:Objects源码解析
Objects是一个纯粹的工具类而他真正有用的方法也就是equals和hashCode方法,剩下其他的方法在java中都有相应实现的类equals联系Object的equals方法看一下Objects的equals方法有什么好处:java版:public boolean equals(Object obj) { return (this == obj);}gua...原创 2018-12-05 10:09:38 · 185 阅读 · 0 评论 -
Guava源码解析五:Splitter源码解析
在通读整片源码前先来了解其中的两个内部类,这两个内部类才是真正去分解字符串的工人:处理字符、字符串、正则的接口,此接口的定义实质为策略模式private interface Strategy { Iterator<String> iterator(Splitter var1, CharSequence var2);}此接口中只有一个方法,返回的是一个Iterat...原创 2018-12-05 10:06:55 · 834 阅读 · 0 评论 -
Guava源码解析四:Joiner源码解析
将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来变量//分割符private final String separator; 构造方法两个构造函数都是静态构造器,所以不能直接使用这两个构造器去创建Joiner,所以想要创建Joiner只能使用静态方法。可接收字符串和字符,字符串可以为空,字符不可为空字符private Joiner(...原创 2018-12-05 09:58:21 · 830 阅读 · 0 评论 -
Guava源码解析三:Guava-Ints源码解析
构造函数private Ints() {}静态构造器,所以只能使用类直接调用静态方法来使用工具类中的方法 常用静态方法1.compare(int a, int b)比较两个指定的int值源码实现为:public static int compare(int a, int b) { //如果a<b返回-1, 如果a>b返回1, 如果a=b返...原创 2018-12-05 09:40:46 · 282 阅读 · 0 评论 -
Guava源码解析二:Guava-Strings源码解析
构造器private Strings() {}静态构造器,所以只能使用类直接调用静态方法来使用工具类中的方法 静态方法对于Strings的方法可以分为三类进行分析第一类是对字符串为null或空的处理1.nullToEmpty(@Nullable String string)如果非空,则返回给定的字符串;否则返回空字符串源码实现为:public sta...原创 2018-12-05 09:37:44 · 266 阅读 · 0 评论 -
Guava源码解析一:Optional源码分析
创建Optional实例(以下都是静态方法):Optional.of(T) 创建指定引用的Optional实例,若引用为null则快速失败Optional.absent() 创建引用缺失的Optional实例Optional.fromNullable(T) 创建指定引用的Optional实例,若引用为null则表示缺失 用Optional实例查询引用(以下都是非静态方法):...原创 2018-11-27 09:37:43 · 873 阅读 · 0 评论