分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

JAVA中常用接口的介绍及使用示例:java.lang.Comparable

JKD中说明

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射(接口java.util.SortedMap<K,V>)中的键或有序集合(接口 java.util.SortedSet<E>)中的元素,无需指定比较器(接口 java.util.Comparator<T>)。

对于类 C的每一个 e1和 e2来说,当且仅当 e1.compareTo(e2) == 0与 e1.equals(e2)具有相同的 boolean值时,类 C的自然排序才叫做 equals一致。注意,null不是任何类的实例,即使 e.equals(null)返回 false,e.compareTo(null)也将抛出 NullPointerException。

建议(虽然不是必需的)最好使自然排序与 equals一致。这是因为在使用自然排序与 equals不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据 equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a和 b添加到没有使用显式比较器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二个 add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a和 b是相等的。

实际上,所有实现 Comparable的 Java核心类都具有与 equals一致的自然排序。java.math.BigDecimal是个例外,它的自然排序将值相等但精确度不同的 BigDecimal对象(比如 4.0和 4.00)视为相等。

从数学上讲,定义给定类 C上自然排序的关系式如下:

{(x, y)|x.compareTo(y) <= 0}。

整体排序的是:

{(x, y)|x.compareTo(y) == 0}。

它直接遵循compareTo 的协定,商是C 的等价关系,自然排序是C 的整体排序。当说到类的自然排序与 equals 一致时,是指自然排序的商是由类的equals(Object)方法定义的等价关系。

{(x, y)|x.equals(y)}。

此接口是Java Collections Framework的成员。

笔者注:注意字符串与数字在一起的时候的排序,这个时候数字被当做字符处理,排序时需要指定比较器才可以比较准确。如将“loop1,loop5,loop11,loop2,loop13”进行排序,如果直接采用Collections.sort(或Arrays.sort),得出的结果将会是:loop1,loop11,loop13,loop2,loop5。参见实例二部份中自定义比较器的实现,就可以得出正确的排序。

示例一:

publicvoidcomparableTest() {

//TODO Auto-generated method stub

String a="1",b="1";

System.out.println(a.compareTo(b));

Integer c=1,d=1;

System.out.println(c.compareTo(d));

}

示例二:

/**

*将传入的HashMap,将其中值为子HashMap的键进行排序,排好序后以List返回,List中存放的是排好序的、原HashMap的键。

*该排序通过Collections的sort方法,Collections是Collection的一个工具类,自定义排序,需要实现自定义的Comparator,默认的排序是按字符的ASCII进行排序的。

*其中需要注意的时,被排序的Map,必须具有相似的结构、相同的前缀,否则会报错,如List的键如下:

*Mapmap=newHashMap();

*map.put("loop7","7");

*map.put("loop3","3");

*map.put("loop1","1");

*map.put("loop15","15");

*...

*他们都有相同的前缀loop,并且前缀中不能够包括数字,前缀可以是任意不包括数字的字符串.也就是说传入的HashMap,其子HashMap的键,一定要按上面的规则,否则将会报错.

*@parammap    包括待排序键的HashMap

*@return       存放排好序后的HashMap的键的List

*/

privatestatic List hashMapKey2SortedList(Map map){

List list = new ArrayList();

Iterator iterator=map.keySet().iterator();

while(iterator.hasNext()){

String key=(String)iterator.next();

Object obj=map.get(key);

if(objinstanceof Map){

list.add(key);

}

}

/**

*排序通过实现自定义比较器进行排序

*/

Collections.sort(list,new Comparator(){

publicint compare(Object o1, Object o2) {

String key1=o1.toString();

String key2=o2.toString();

String prefix="";

for(int i=0;i<key1.length();i++){

String tmp=key1.substring(i,i+1);

try{

Integer.parseInt(tmp);

}catch(Exception e){

prefix+=tmp;

}

}

key1=key1.replace(prefix, "");

key2=key2.replace(prefix, "");

int key1_int=0;

int key2_int=0;

try{

key1_int=Integer.parseInt(key1);

}catch(NumberFormatException e){

}

try{

key2_int=Integer.parseInt(key2);

}catch(NumberFormatException e){

}

return key1_int-key2_int;

}

});

return list;

}

本文出自:冯立彬的博客

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

JAVA中常用接口的介绍及使用示例 java lang Comparable相关推荐

  1. php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于Java中SimpleDateFormat的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么要使用SimpleDateFo ...

  2. java中Mark接口_JVM源码分析之Java对象头实现

    原标题:JVM源码分析之Java对象头实现 原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 "365篇原创计划"第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Ja ...

  3. java中model接口与实现类_关于java中dao,model,service,impl,util的理解

    dao 与数据库的操作,增删改查等方法 model 一般都是javabean对象,例如与数据库的某个表相关联. service 供外部调用,等于对dao,model等进行了包装. impl 定义的接口 ...

  4. Java中常用的类,包,接口

    Java中常用的类,包,接口 包名 说明 java.lang 该包提供了Java编程的基础类,例如 Object.Math.String.StringBuffer.System.Thread等,不使用 ...

  5. 六、Java中常用的API(通过包进行分类)————File类、IO流

    一.util工具包下的补充类 介绍io包之前,先补充介绍几个常用的工具类 1.Scanner类 什么是Scanner类 一个可以解析基本类型和字符串的简单文本扫描器. 例如,以下代码使用户能够从 Sy ...

  6. java高级特性2_Java高级特性 第2节 java中常用的实用类(1)

    一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...

  7. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  8. java中常用API、Scanner类、匿名对象、Random类、ArrayList类、对象数组

    java中常用API: API:Application Programming Interface,应用程序编程接口.Java API是JDK中提供给我们使用的类的说明文档.这些类将底层的代码实现封装 ...

  9. java中的接口是什么?

    接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口 ...

最新文章

  1. [转] ASP.NET MVC3 路由和多数据集的返回
  2. Node.js 多版本安装方式
  3. IHttpHandler的学习(0)
  4. thinkphp5.0 使用paginate 分页后 foreach 循环体内不能处理数据的解决办法
  5. pd.get_dummies()
  6. 对于指针与malloc函数关系的研究,以及指针的赋值。
  7. data-packed volume container - 每天5分钟玩转 Docker 容器技术(43)
  8. 图书馆学应掌握计算机知识,图书馆学专业基础知识点整理.doc
  9. [转]关于管理的经典故事(员工激励)
  10. ArcGis 拓扑检查——狭长角锐角代码C#
  11. 函数发生器输出电压值会与设定值不同
  12. 电驴搜索服务器正在连接,电驴未连接到服务器是什么原因?
  13. dfuse Search 是所有 EOSIO 开发者的必备工具
  14. 【解决】路由器设置成交换机使用
  15. 爬取图片,并按比例划分数据集
  16. 计算机网络智能小区综合分布线系统的总结,智能住宅小区综合布线系统的构建...
  17. burpsuite.jar文件双击打不开解决方法
  18. 互联网产品经理常用工具有哪些
  19. 三种标识的计算机和U盘,了解这三种方法并轻松加密U盘
  20. 颜值爆表功能强大,乐Pro3双摄AI版暗夜黑版5月17日预约

热门文章

  1. 数据膨胀了?你的数仓又没有空间了?
  2. 有了这三个神器工具集,应用开发想怎么玩就怎么玩
  3. 代码 or 指令,浅析ARM架构下的函数的调用过程
  4. 【华为云技术分享】玩转云上数据湖,解析Serverless 技术落地
  5. 【华为云技术分享】ARM体系结构基础(2)
  6. 无码系列-7-代码的语文修养_上篇
  7. 关于Python的随机数模块,你必须要掌握!
  8. matlab excel 进程,Matlab使用xlsread, xlswrite函数导致excel进程无法终止的问题
  9. daemons java,java.lang.ThreadGroup.isDaemon()方法实例
  10. LIF模型及其变种 Training Spiking Deep Networks for Neuromorphic Hardware