Comparable和Comparator的用法与区别
一 应用场景:
当对自己定义的数据结构需要进行指定排序的时候,java中给了我们两个接口Comparable和Comparator
comparable接口定义一个方法:
public interface Comparable<T> {public int compareTo(T o);}
comparator接口定义方法(jdk版本不同数量不同)注意:有些类实现了comparator,但是没有实现equals方式是因为Object类已经实现了equals方法
public interface Comparator<T> {int compare(T o1, T o2);boolean equals(Object obj);
}
区别在于:实现了comparable的对象直接就可以成为一个可以比较的对象,不过得在类中进行方法定义;comparator在对象外比较,不修改实体类。
二 实例演示
1 Comparable用法
1 定义一个Person实体类实现Comparable接口
public class Person implements Comparable<Person>{public int age; //年龄public String name; //姓名//get、set方法public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(int age, String name) {super();this.age = age;this.name = name;}@Overridepublic String toString() {return "Person [age=" + age + ", name=" + name + "]";}//实现Comparable接口必须实现compareTo方法public int compareTo(Person o) {if(this.age==o.age&&this.name==o.name){return 0;}else if(this.age>o.age){System.out.println("this.age:"+this.age+"o.age:"+o.age);return 1;}else{return -1;} }public Person() {super();// TODO Auto-generated constructor stub}}
2 编写测试类进行测试(使用Junit)
import org.junit.Test;
import junit.framework.TestCase;
public class TestCompare extends TestCase {@Testpublic void test1(){List<Person> list=new ArrayList<Person>();Person test1=new Person(66,"李四");Person test2=new Person(29,"王五");Person test3=new Person(28,"赵六");Person test4=new Person(20,"钱三");list.add(test4);list.add(test3);list.add(test2);list.add(test1);Collections.sort(list);for(Object s:list){System.out.println(s);}}
}
3 运行结果:对象实现了comparable接口就自动排序
this.age:28o.age:20
this.age:29o.age:28
this.age:66o.age:29
Person [age=20, name=钱三]
Person [age=28, name=赵六]
Person [age=29, name=王五]
Person [age=66, name=李四]
2 Comparator用法
1 定义一个实体类
public class emp {public int age;public String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public emp(int age, String name) {super();this.age = age;this.name = name;}public emp() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "emp [age=" + age + ", name=" + name + "]";}
}
2 编写测试类测试:
import org.junit.Test;
import junit.framework.TestCase;
public class TestCompare extends TestCase {@Testpublic void test2(){List<emp> list=new ArrayList<emp>();emp test1=new emp(69,"李四");emp test2=new emp(29,"王五");emp test3=new emp(28,"赵六");emp test4=new emp(20,"钱三");list.add(test4);list.add(test3);list.add(test2);list.add(test1);Collections.sort(list,new Comparator<emp>(){@Overridepublic int compare(emp o1, emp o2) {if(o1.age==o2.age&&o1.name==o2.name){return 0;}else if(o1.age>o2.age){return 1; }else{return 0;}}}); for(Object s:list){System.out.println(s);} }
}
3 运行结果:
emp [age=20, name=钱三]
emp [age=28, name=赵六]
emp [age=29, name=王五]
emp [age=69, name=李四]
欢迎关注下方公众号,一起交流,期待你的到来
Comparable和Comparator的用法与区别相关推荐
- Comparable和Comparator的联系与区别
关于Comparable和Comparator的联系和区别,我们先实现这个两个接口. package com.blb.考前; public class Demo02 implements Compar ...
- Comparable和Comparator的用法和区别
文章目录 目录 文章目录 前言 一 .Comparable 1.Comparable是什么? 2.comparable有用吗? 有用的话它有什么用? 没学compar之前的解决办法 : 2.在学习了c ...
- 关于comparable与comparator的用法(即自定义集合框架用法 )
1 package javastudy; 2 3 import java.util.Comparator; 4 import java.util.Iterator; 5 import java.uti ...
- Comparable和Comparator两接口的区别
comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序 Comparable可以认为是一个内比较器,实现了Comparable接口的 ...
- 来吧,一文彻底搞懂Java中的Comparable和Comparator
大家好,我是沉默王二,周末在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...
- 面试官:元素排序Comparable和Comparator有什么区别?
作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列,Git开源地址:htt ...
- Java 解惑:Comparable 和 Comparator 的区别
读完本文你将了解到: Comparable 自然排序 Comparator 定制排序 总结 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢? ...
- Java中Comparable和Comparator区别小结
阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...
- Java中Comparable和Comparator接口区别分析
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...
最新文章
- java 的23种设计模式
- 《中国人工智能学会通讯》——8.25 基于演化优化的生物网络配准
- Sphinx全文检索引擎测试
- java403forbidden_java – Spring boot – 返回403 Forbidden而不是重定向到登录页面
- linuex查看繁忙_[个人笔记] 关于linux的常见问题合集
- ASE光源 ASE噪声
- puppet成长日记二 Package资源详细介绍及案例分析
- Tomcat设置监听端口80、配置虚拟主机、安装zrlog博客、日志文件
- 在JavaScript中从base64字符串创建Blob
- css3中的文字效果
- linux下jdk1.8搭建笔记
- 关于word粘贴图片显示不全的解决办法
- 数据库服务器虚拟内存设置
- 树莓派4b安装Android TV 10
- matlab 三维颜色,Matlab三维视图颜色控制
- Matlab 绘制 - 点和向量:向量加减的方法和源码
- Hyperledger Fabric 2.x 环境搭建
- [BJDCTF2020]Mark loves cat(3种解法)
- RS485——RS485通信基础理论与STM32测试
- 微信朋友圈营销如何做好头像_昵称_签名_背景基础设置?