Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是“空指针”安全的。

Objects实现的方法如下:

关于compare(T,T,Comparator<? super T>)方法在源码中是如何定义的:

 public static <T> int compare(T a, T b, Comparator<? super T> c) {return (a == b) ? 0 :  c.compare(a, b);}

以上使用<T> 定义了一个泛型方法,关于<T>和类型形参 T的说明在后续讲解泛型时会提到。

在这里传入两个对象a和b,并创建一个Comparator接口实现类的对象,其中Comparator接口定义了以下方法:

int compare(T o1, T o2);boolean equals(Object obj);

因此compare方法中先是判断对象a和对象b是否相等,如果相等的话,返回0,不相等时,通过Comparator接口实现

compare(a,b)方法。

我们来看看在实际生活中是如何定义的:

class User {public String name;public int age;public User(String name,int age){this.name=name;this.age=age;}protected String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "name="+name+"\nage="+age;}}
public class Main {public User user1,user2;public static void main(String[] args) {new Main().init();}public void init(){User user1=new User("Aill", 25); User user2=new User("Cill", 24);  int compare=Objects.compare(user1, user2,new Comparator<User> () {@Overridepublic int compare(User o1, User o2) {return o1.name.compareToIgnoreCase(o2.name);}});System.out.println(compare);}
}

输出:

-2

在上面的程序中,实现了compare(a,b)方法,因此,我们可以在此方法中,自定义一些判断两个对象大小的方法,以

上是通过o1和o2的name来比较,compareToIgnoreCase(String str)方法是java.lang.String类下的方法,作用是按字

典顺序比较两个字符串,不考虑大小写。

String类也实现了Comparable<String>接口:

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence 

在String类中compareToIgnoreCase(String str)方法:

 public int compareToIgnoreCase(String str) {return CASE_INSENSITIVE_ORDER.compare(this, str);}
public static final Comparator<String> CASE_INSENSITIVE_ORDER= new CaseInsensitiveComparator();private static class CaseInsensitiveComparatorimplements Comparator<String>, java.io.Serializable {// use serialVersionUID from JDK 1.2.2 for interoperabilityprivate static final long serialVersionUID = 8575799808933029326L;public int compare(String s1, String s2) {int n1 = s1.length();int n2 = s2.length();int min = Math.min(n1, n2);for (int i = 0; i < min; i++) {char c1 = s1.charAt(i);char c2 = s2.charAt(i);if (c1 != c2) {c1 = Character.toUpperCase(c1);c2 = Character.toUpperCase(c2);if (c1 != c2) {c1 = Character.toLowerCase(c1);c2 = Character.toLowerCase(c2);if (c1 != c2) {// No overflow because of numeric promotionreturn c1 - c2;}}}}return n1 - n2;}/** Replaces the de-serialized object. */private Object readResolve() { return CASE_INSENSITIVE_ORDER; }}

以上定义了一个静态内部类CaseInsensitiveComparator并实现了 Comparable<String>接口中的compare(String s1,

String s2)方法,Math.min(n1, n2)是将两个int值较小的那个返回。通过for循环,根据charAt(int index)方法获取指定

索引处的char值。最后通过Character.toUpperCase和Character.toLowerCase将char转换成大写和小写后再判断是否

相等,如果还不相等,就返回它们两个ASCII码相减后的值,否则两个char值相等,返回0。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43940265   情绪控_

Java学习笔记20相关推荐

  1. java学习笔记20(Lambda表达式、函数式编程、流式计算、练习)

    文章目录 11.3 学习内容 Lambda表达式 Lambda标准格式 格式说明 省略规则 使用前提 函数式接口 预定义的函数式接口 工作内容 任务1 总结&明日计划 11.4 学习内容 流式 ...

  2. java学习笔记20(Arraylist复习,Collection接口方法,迭代器,增强型for循环)

    集合:集合是Java提供的一种容器,可以用来存储多个数据: 集合与数组的区别:集合的长度是可变的,数组的长度是固定的 集合中存储的数据必须是引用类型数据: ArrayList回顾: public cl ...

  3. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo;public class StringTest {public static void main(String[] args) {g ...

  4. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  5. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

  6. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  7. java学习笔记8--接口总结

    接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3- ...

  8. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  9. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

最新文章

  1. 大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会
  2. linux后台执行命令:amp;与nohup的用法
  3. 风变编程python网址_风变编程Python:如何打造职场差异化竞争优势
  4. Asp.net 服务器端控件
  5. 使用SQLite数据库存储数据(1)-操作SQLite数据库
  6. 每天一个小异常——Excel的导出报类型转换异常
  7. nuttx linux 编译,linux下建立nuttx开发环境
  8. 应用程序如何链接静态QT Plugin库
  9. geatpy自定义初始的x值、自定义初始基因
  10. 【.NET】SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间
  11. 将系统升级为鸿蒙11.1系统,即将脱胎换骨!EMUI11.1升级名单遭曝光,或要和跟安卓说再见...
  12. Centos安装桌面系统并设置成默认启动
  13. [Music]Candle in the Wind 1997《风中之烛》缅怀戴安娜
  14. 城八区和通州区限价房申请5月16日开始受理
  15. 计算机一级考excel基础知识,计算机一级考试模拟题(word、excel、ppt以及基础知识)...
  16. 相约2021,回首2020 | 我在CSDN的年度总结
  17. js:写一个函数实现任意数组的翻转
  18. 络腮胡子的男程序员们都在怎么刮胡子呢?应该用电推子来刮胡子
  19. 毒舌电影 是怎么成长起来的?为什么这么快就被封了
  20. 支付宝集五福,一个软件就够了~

热门文章

  1. 作业(二)—python实现wc命令
  2. 安全研究 | Jenkins 任意文件读取漏洞分析
  3. mybatis 一二事(1) - 简单介绍
  4. MySQL 行子查询
  5. MAC OS X 10.8 操作远程SSH服务器 + 无密码输入使用SSH服务器
  6. GroovyQ | 关注Groovy社区动态,分享Groovy开发经验。
  7. 注册时发短信如何防止别人恶意调用短信接口
  8. C 语言中的 feof()函数
  9. hihocoder #1333 : 平衡树·Splay2
  10. Java知多少(43)异常处理基础