博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读源码Apache-commons-lang3-3.1(二)
阅读量:6137 次
发布时间:2019-06-21

本文共 2272 字,大约阅读时间需要 7 分钟。

ObjectUtils类重新实现了toString,equals,hashcode生成策略等方法,增加了null对象的处理,对象的比较,一组对象中对象的频繁出现,最佳猜测策略,克隆的方法。


ObjectUtils类的基本static方法:

defaultIfNull(T,  T) 参数1为null,用参数2代替
firstNonNull(T...) 获取指定参数列表中第一个不为null的元素
equals(Object, Object)
notEqual(Object, Object)
hashCode(Object)
hashCodeMulti(Object...) 多对象hashcode生成策略
identityToString(Object)
identityToString(StringBuffer, Object)
toString(Object)
toString(Object, String)
min(T...) 获取指定参数列表中最小的元素
max(T...) 获取指定参数列表中最大的元素
compare(T, T) 比较两个参数大小,默认null小于任何不为null的值
compare(T, T, boolean) 比较两个参数大小,参数3设置null的大小,false为小于任何不为null的值true相反
median(T...) 以最佳猜测的方式获取参数列表中的中间值,如果列表数为偶数,则中间值取低位的值
median(Comparator<T>,  T...) 重载方法,提供最佳猜测的排序策略
mode(T...) 获取参数列表中最频繁出现的项
clone(T)
cloneIfPossible(T)

1.compare(T,T,boolean)对象比较的新策略。

 compare是静态方法,则ObjectUtils.compare(a, b, false)做比较。

 源代码:

public static 
> int compare(T c1, T c2, boolean nullGreater) { if (c1 == c2) { return 0; } else if (c1 == null) { return nullGreater ? 1 : -1; } else if (c2 == null) { return nullGreater ? -1 : 1; } return c1.compareTo(c2); }

从源代码上分析,参数nullGreater为true时null大于任何不为null的对象,false时null小于任何不为null的对象。


2.median(Comparator<T>,  T...)和median(T...)

这两个方法重载,第一个方法提供了参数列表对象的排序策略,第二个方法采用了Java中Tree的默认排序策略。目的是找出参数序列的中间元素,如果参数序列元素数为偶数个则中间元素取低位的。


Range类,具有范围的对象。适合可比较对象,Range范围不可变,可以存在任意类型对象范围,范围内的元素类型应该保持一致。


Range类的基本静态方法:

访问方法
getMinimum() 获取最小元素
getMaximum() 获取最大元素
getComparator() 获取比较器对象
isNaturalOrdering() 判断是否是自然排序
元素类方法
contains(T) 判断T元素是否在对象访问类
isBefore(T) 判断T元素是否在对象最大范围之后
isAfter(T) 判断T元素是否在对象最小范围之前
isStartedBy(T) 判断T元素是否是对象范围开始元素,即T==minElement
isEndedBy(T) 判断T元素是否是对象范围结束元素,即T==maxElement
elementCompareTo(T) 判断T元素在对象访问的位置,返回int值,位置如:-1[minElement 0 maxElement]1
范围方法 下面方法的执行条件是范围元素类型一致且比较策略一致(compare)
containsRange(Range<T>) 参数范围对象是否包含在对象范围
isAfterRange(Range<T>) 参数范围对象是否在对象范围之前
isBeforeRange(Range<T>) 参数范围对象是否在对象范围之后
isOverlappedBy(Range<T>) 参数范围对象是否和对象范围有交集
intersectionWith(Range<T>) 求参数范围对象和对象范围的交集范围对象


1.Range类有一个final类型的Comparator<T> comparator属性对象,即一个不可变的范围对象需要提供一个比较策略。


2.Range类默认的比较策略为自然比较

源代码如下:

public int compare(Object obj1, Object obj2) {            return ((Comparable) obj1).compareTo(obj2);        }

  Range类和ObjectUtils类都是基于Object的实现,在管理对象方面有极大便利。

转载地址:http://wdkya.baihongyu.com/

你可能感兴趣的文章
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
php小知识
查看>>
Windows下安装、运行Lua
查看>>
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(二)
查看>>
初识中间件之消息队列
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>