当前位置: 首页 > news >正文

宁波网站免费建设服务平台奥派电子商务网站建设论文

宁波网站免费建设服务平台,奥派电子商务网站建设论文,北京小程序设计制作,有个做名片什么的网站详解Java中Comparable和Comparator接口的区别发布于 2020-7-20|复制链接摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一下Java中Comparable和Comparator接口的区别#xff0c;两者都有比较的功能#xff0c;那么究竟有什么区别呢#xff0c;感兴趣的J…详解Java中Comparable和Comparator接口的区别发布于 2020-7-20|复制链接摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一下Java中Comparable和Comparator接口的区别两者都有比较的功能那么究竟有什么区别呢感兴趣的Java开发者继续看下去吧。Comparable 简介 ..详解Java中Comparable和Comparator接口的区别本文要来详细分析一下Java中Comparable和Comparator接口的区别两者都有比较的功能那么究竟有什么区别呢感兴趣的Java开发者继续看下去吧。Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口就意味着“该类支持排序”。  即然实现Comparable接口的类支持排序假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。此外“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素而不需要指定比较器。Comparable 定义Comparable 接口仅仅只包括一个函数它的定义如下javapackage java.lang;import java.util.*;public interface Comparable {public int compareTo(T o);}说明假设我们通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”意味着“x比y小”返回“零”意味着“x等于y”返回“正数”意味着“x大于y”。Comparator 简介Comparator 是比较器接口。我们若需要控制某个类的次序而该类本身不支持排序(即没有实现Comparable接口)那么我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。也就是说我们可以通过“实现Comparator类来新建一个比较器”然后通过该比较器对类进行排序。Comparator 定义Comparator 接口仅仅只包括两个个函数它的定义如下javapackage java.util;public interface Comparator {int compare(T o1, T o2);boolean equals(Object obj);}说明(01) 若一个类要实现Comparator接口它一定要实现compareTo(T o1, T o2) 函数但可以不实现 equals(Object obj) 函数。为什么可以不实现 equals(Object obj) 函数呢 因为任何类默认都是已经实现了equals(Object obj)的。 Java中的一切类都是继承于java.lang.Object在Object.java中实现了equals(Object obj)函数所以其它所有的类也相当于都实现了该函数。(02) int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”意味着“o1比o2小”返回“零”意味着“o1等于o2”返回“正数”意味着“o1大于o2”。Comparator 和 Comparable 比较Comparable是排序接口若一个类实现了Comparable接口就意味着“该类支持排序”。而Comparator是比较器我们若需要控制某个类的次序可以建立一个“该类的比较器”来进行排序。我们不难发现Comparable相当于“内部比较器”而Comparator相当于“外部比较器”。我们通过一个测试程序来对这两个接口进行说明。源码如下javaimport java.util.*;import java.lang.Comparable;/*** desc Comparator和“Comparable”的比较程序。* (01) Comparable* 它是一个排序接口只包含一个函数compareTo()。* 一个类实现了Comparable接口就意味着“该类本身支持排序”它可以直接通过Arrays.sort() 或 Collections.sort()进行排序。* (02) Comparator* 它是一个比较器接口包括两个函数compare() 和 equals()。* 一个类实现了Comparator接口那么它就是一个“比较器”。其它的类可以根据该比较器去排序。** 综上所述Comparable是内部比较器而Comparator是外部比较器。* 一个类本身实现了Comparable比较器就意味着它本身支持排序若它本身没实现Comparable也可以通过外部比较器Comparator进行排序。*/public class CompareComparatorAndComparableTest{public static void main(String[] args) {// 新建ArrayList(动态数组)ArrayList list new ArrayList();// 添加对象到ArrayList中list.add(new Person(ccc, 20));list.add(new Person(AAA, 30));list.add(new Person(bbb, 10));list.add(new Person(ddd, 40));// 打印list的原始序列System.out.printf(Original sort, list:%s\n, list);// 对list进行排序// 这里会根据“Person实现的Comparable接口”进行排序即会根据“name”进行排序Collections.sort(list);System.out.printf(Name sort, list:%s\n, list);// 通过“比较器(AscAgeComparator)”对list进行排序// AscAgeComparator的排序方式是根据“age”的升序排序Collections.sort(list, new AscAgeComparator());System.out.printf(Asc(age) sort, list:%s\n, list);// 通过“比较器(DescAgeComparator)”对list进行排序// DescAgeComparator的排序方式是根据“age”的降序排序Collections.sort(list, new DescAgeComparator());System.out.printf(Desc(age) sort, list:%s\n, list);// 判断两个person是否相等testEquals();}/*** desc 测试两个Person比较是否相等。* 由于Person实现了equals()函数若两person的age、name都相等则认为这两个person相等。* 所以这里的p1和p2相等。** TODO若去掉Person中的equals()函数则p1不等于p2*/private static void testEquals() {Person p1 new Person(eee, 100);Person p2 new Person(eee, 100);if (p1.equals(p2)) {System.out.printf(%s EQUAL %s\n, p1, p2);} else {System.out.printf(%s NOT EQUAL %s\n, p1, p2);}}/*** desc Person类。* Person实现了Comparable接口这意味着Person本身支持排序*/private static class Person implements Comparable{int age;String name;public Person(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public int getAge() {return age;}public String toString() {return name - age;}/*** 比较两个Person是否相等若它们的name和age都相等则认为它们相等*/boolean equals(Person person) {if (this.age person.age this.name person.name)return true;return false;}/*** desc 实现 “Comparable” 的接口即重写compareTo函数。* 这里是通过“person的名字”进行比较的*/Overridepublic int compareTo(Person person) {return name.compareTo(person.name);//return this.name - person.name;}}/*** desc AscAgeComparator比较器* 它是“Person的age的升序比较器”*/private static class AscAgeComparator implements Comparator {Overridepublic int compare(Person p1, Person p2) {return p1.getAge() - p2.getAge();}}/*** desc DescAgeComparator比较器* 它是“Person的age的升序比较器”*/private static class DescAgeComparator implements Comparator {Overridepublic int compare(Person p1, Person p2) {return p2.getAge() - p1.getAge();}}}下面对这个程序进行说明。a) Person类定义。如下javaprivate static class Person implements Comparable{int age;String name;.../*** desc 实现 “Comparable” 的接口即重写compareTo函数。* 这里是通过“person的名字”进行比较的*/Overridepublic int compareTo(Person person) {return name.compareTo(person.name);//return this.name - person.name;}}说明(01) Person类代表一个人Persong类中有两个属性age(年纪) 和 name“人名”。(02) Person类实现了Comparable接口因此它能被排序。b) 在main()中我们创建了Person的List数组(list)。如下java// 新建ArrayList(动态数组)ArrayList list new ArrayList();// 添加对象到ArrayList中list.add(new Person(ccc, 20));list.add(new Person(AAA, 30));list.add(new Person(bbb, 10));list.add(new Person(ddd, 40));c) 接着我们打印出list的全部元素。如下java// 打印list的原始序列System.out.printf(Original sort, list:%s\n, list);d) 然后我们通过Collections的sort()函数对list进行排序。由于Person实现了Comparable接口因此通过sort()排序时会根据Person支持的排序方式即 compareTo(Person person) 所定义的规则进行排序。如下java// 对list进行排序// 这里会根据“Person实现的Comparable接口”进行排序即会根据“name”进行排序Collections.sort(list);System.out.printf(Name sort, list:%s\n, list);e) 对比Comparable和Comparator我们定义了两个比较器 AscAgeComparator 和 DescAgeComparator来分别对Person进行 升序 和 降低 排序。e.1) AscAgeComparator比较器它是将Person按照age进行升序排序。代码如下java/*** desc AscAgeComparator比较器* 它是“Person的age的升序比较器”*/private static class AscAgeComparator implements Comparator {Overridepublic int compare(Person p1, Person p2) {return p1.getAge() - p2.getAge();}}e.2) DescAgeComparator比较器它是将Person按照age进行降序排序。代码如下java/*** desc DescAgeComparator比较器* 它是“Person的age的升序比较器”*/private static class DescAgeComparator implements Comparator {Overridepublic int compare(Person p1, Person p2) {return p2.getAge() - p1.getAge();}}f) 运行结果运行程序输出如下javaOriginal sort, list:[ccc - 20, AAA - 30, bbb - 10, ddd - 40]Name sort, list:[AAA - 30, bbb - 10, ccc - 20, ddd - 40]Asc(age) sort, list:[bbb - 10, ccc - 20, AAA - 30, ddd - 40]Desc(age) sort, list:[ddd - 40, AAA - 30, ccc - 20, bbb - 10]eee - 100 EQUAL eee - 100
http://www.huolong8.cn/news/283599/

相关文章:

  • 南京江宁区住房建设局网站软件网站的服务器
  • 阜阳网站制作公司哪里有wordpress文章喜欢
  • 08 iis安装网站学习前端开发的网站
  • 微信网站设计模板下载ps做产品的网站
  • 钱站网站如何广西住房和建设厅网站
  • 什么网站可以做软件有哪些做一个网址需要多少钱
  • 盘县网站开发百度指数是什么
  • 北京人才招聘网站上海人才网官方网站
  • 做淘宝要网站佛山网站建设企业
  • 安徽做网站哪家好学网站建设工作
  • 潍坊哪里可以做网站wordpress自定义文章类型
  • 漂流瓶做任务网站怎么制作一个最简单的网站
  • 深圳营销型网站建设 宝安西乡广东企业网站建设
  • 网站建设问题分类和排除方法分析福建省铁路建设办公室网站
  • 网站开发 后端服务wordpress5.21开启多站点
  • liferay 做网站服装公司介绍模板
  • 外贸网站建设及推广网站vip怎么做
  • 免费自创网站沙漠风网站开发怎样
  • 算命手机网站开发福田瑞沃前四后四车价格
  • 怎样上传网站到百度知乎网站内容建设的逻辑
  • 网站经营内容做合成照片的国外网站
  • 手机 网站 翻页 外部做网站的技术理论
  • 成立网站是不是需要先成立公司手机网站竞价
  • 用cms做网站的具体步骤wordpress 主题和插件下载失败
  • 如何评判网站建设岗位网站 如何做后台维护
  • 建设一个直播网站如何更改网站关键词
  • 建设厅网站ca验证失败企业网站建设综合实训心得体会一千字
  • 亳州电商网站建设关于学校网站建设经费的申请
  • 郑州金水区做网站公司网站内容管理软件
  • 无锡网站建设xinysu上海企业云