GUAVA Object 介绍

Object

如果equals()判断两个对象相等,那么它们的hashCode()方法应该返回同样的值。
两个对象用equals()方法比较返回false,它们的hashCode可以相同也可以不同。应该意识到,为两个不相等的对象产生两个不同的hashCode可以改善哈希表的性能。
CompareTo:compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现 Comparable接口的,必须重写public int compareTo(T o)方法。java规定,若a,b是两个对象,当a.compareTo(b)>0时,则a大于b,a.compareTo(b)<0时,a compare: compare(Object o1,Object o2)方法是java.util.Comparator接口的方法,compare方法内主要靠定义的compareTo规定的对象大小关系规则来确定对象的大小。
guava提供了ComparisonChain,是一个lazy的比较过程, 当比较结果为0的时候, 即相等的时候, 会继续比较下去, 出现非0的情况, 就会忽略后面的比较。ComparisonChain实现的compare和compareTo在代码可读性和性能上都有很大的提高。

class Student implements Comparable{
    public String name;
    public int age;
    public int score;

    Student(String name, int age, int socre){
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public int compareTo(Student o) {
        return ComparisonChain.start()
                .compare(name, o.name)
                .compare(age, o.age)
                .compare(score, o.score, Ordering.natural().nullsLast())
                .result();
    }
}

//使用Compare
class StudentComparator implements Comparator {


    @Override
    public int compare(Student o1, Student o2) {
        return ComparisonChain.start()
                .compare(o1.name, o2.name)
                .compare(o1.age, o2.age)
                .compare(o1.score, o2.score)
                .result();
    }
}

Ordering犀利的比较器

Ordering提供了链式方法调用和加强现有的比较器
常见的静态方法:
natural():使用Comparable类型的自然顺序,例如:整数从小到大,字符串是按字典顺序
usingToString():并按照字典的顺序排序,依照toString()形式返回
arbitrary() :返回一个所有对象的任意顺序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是没有任何含义, 但是在VM的生命周期是一个常量。
操作方法:
reverse(): 返回与当前Ordering相反的排序:   nullsFirst(): 返回一个将null放在non-null元素之前的Ordering,其他的和原始的Ordering一样;
nullsLast():返回一个将null放在non-null元素之后的Ordering,其他的和原始的Ordering一样;
compound(Comparator):返回一个使用Comparator的Ordering,Comparator作为第二排序元素,例如对bug列表进行排序,先根据bug的级别,再根据优先级进行排序;
lexicographical():返回一个按照字典元素迭代的Ordering;
onResultOf(Function):将function应用在各个元素上之后, 在使用原始ordering进行排序;
greatestOf(Iterable iterable, int k):返回指定的第k个可迭代的最大的元素,按照这个从最大到最小的顺序。是不稳定的。
leastOf(Iterable iterable,int k):返回指定的第k个可迭代的最小的元素,按照这个从最小到最大的顺序。是不稳定的。
isOrdered(Iterable):是否有序,Iterable不能少于2个元素。
isStrictlyOrdered(Iterable):是否严格有序。请注意,Iterable不能少于两个元素。
sortedCopy(Iterable):返回指定的元素作为一个列表的排序副本。

你可能感兴趣的:(JAVA)