首页 > 编程知识 正文

comparable接口实现,compatible怎么记

时间:2023-05-06 17:57:20 阅读:153755 作者:5

java.lang接口Comparable T 先看一些官方API 怎么说:

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

实现此接口的对象列表(和数组)可以按Collections.sort和Arrays.sort自动排序。 实现此接口的对象可以用作有序映射中的键或有序集合中的元素,而无需指定比较器。

只有当e1.compareto(e2 )==0和e1.equals (e2 )对于c类中的每个E1和E2具有相同的布尔值时,c类自然排序才与equals一致。 请注意,null不是类的实例。 即使e.equals(null )返回false,e.com Pareto (null )也会抛出NullPointerException。

建议将自然排序与equals匹配。 这是因为,使用与equals自然排序不匹配的元素(或键)时,没有显式比较器的有序集合(和有序映射表)的行为看起来很奇怪。 具体地,这种有序集合(或有序映射表)违背了正常协议(由equals方法定义的集合)或映射表。

例如,如果将两个键a和b添加到不使用显式比较器的规则集合中((a.equals(b ) a.compareTo(b ) 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 ) }。

下面是个人理解,有理解不到位的请轻拍:

//数组student[]stu={newstudent(1,'1) }、new student (3,'3)、new student (2,'2) }; Arrays.sort(stu ); for(studentss:stu ) system.out.println (ss ); (system.out.println(-------我是分割线----) ); //集合ListStudent list=new ArrayList (; list.add(newstudent(1,'1' ) ); list.add(newstudent(3,'3' ) ); list.add(newstudent(2,'2' ) ); list.sort (空; //collections.sort(list ); for(intI=0; i list.size (; I ) system.out.println(list.get(I ) ); //需要比较的实体是Comparable接口publicclassstudentimplementscomparablestudent { @ overridepublicintcompareto (studento ) retuto

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。