关于 Comparable 的使用
作为一名刚上路的超初级程序员,今天终于可以迈开自己的第一步,写一篇博客。把我自己都感动哭了。
今天看面试题时看到了一个Comparable 的使用,才发现自己好像并没有使用过这个接口,具体这个接口是怎么用的,我在看了几篇comparable的博客以后觉得应该把这个东西记录下来,希望和各位都能够得到成长。
首先我们举一个排列int数组的例子,假如一个数组中有这么几个元素,希望将他进行从小到大排序,不使用冒泡排序等算法,直接使用java中Arrays类的方法进行使用,这个方法就可以直接对数组中的元素进行排序,十分方便。
int[] array = {9,5,7,5,31,7};
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
结果:5 5 7 7 9 31
如果说,现在有一个要求,有一个实体类User,User类中有三个属性,id,name,price
class User{
private int id;
private String name;
private int price;
需要你按照价格升序进行排序(就如上的int数组排序一样)。那么我们做这个的时候,还是可以使用sort()方法,不同的是,之前使用的是int类型的数组,这次需要变更成为,User类型的数组按价格进行排序,这时候就需要让User去实现comparable接口,重写其中的方法,compareTo方法的返回值只有 -1, 0, 1
class User implements Comparable<User>{
private int id;
private String name;
private int price;
public User(int id, String name, int price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
@Override
public int compareTo(User o) {
if(this.price>o.price){
return 1;
}else if(this.price<o.price){
return -1;
}else {
return 0;
}
}
}
最后 new 几个对象,放入User类型的数组中进行比较,使用sort()进行排序就可以了
User[] users = new User[3];
users[0] = new User(1,"寿司",29);
users[1] = new User(2,"蛋挞",21);
users[2] = new User(3,"牛排",25);
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
System.out.println(users[i]);
}
结果: User{id=2, name='蛋挞', price=21}
User{id=3, name='牛排', price=25}
User{id=1, name='寿司', price=29}
1234567.
关于 Comparable 的使用的更多相关文章
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- 12.Java中Comparable接口,Readable接口和Iterable接口
1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...
- 泛型的排序问题(Collections.sort及Comparable的应用)
一.前言 java中对泛型(集合类型)排序的问题,主要采用了两张方式一种是对要排序的实体类,实现Comparable接口,另一种方式,Collections集合工具类进行排序. 二.实现Comp ...
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
- 对象比较器:Comparable和Comparator
在进行对象数组排序的过程中需要使用到比较器,比较器有两个:Comparable和Comparator ①.java.lang.Comparable:是在类定义是时候默认实现好的接口,里面提供有一个co ...
- java中的Comparable接口
类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...
- java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)
import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- java.lang.Comparable<T> 接口
package java.lang; import java.util.*; public interface Comparable<T> { public int compareTo(T ...
随机推荐
- Callable接口实现线程
public class CallableDemo { public static void main(String[] args) throws Exception, ExecutionExcept ...
- Electron开发和Web开发对比
- C语言每日一练——第6题
一.题目要求 计算500~800区间素数的个数cnt,并按所求素数的值从大到小的顺序,计算其间隔间的减.加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数.....的值sum.最后把 ...
- LeetCode刷题总结-树篇(中)
本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...
- Linux Bash之正则表达式
首先注意:正则表达式与通配符是完全不同的概念.通配符(wildcard)代表的是 Bash 操作接口的一个功能,而正则表达式是一种字符串处理的表示方式,一定要区分开来. 正则表达式(Regular E ...
- appium+java(八)获取Toast内容信息
前言 Appium中很经典的问题了,在两年前也就是2017年3月6号07:22分,我才看到appium1.6.3版本的发布,更新内容为Ios上可以实现Toast的获取,而Windows也就是安卓端,还 ...
- 敏捷之旅--携程行程&订单团队
转自本人运营的公众号“ 携程技术中心PMO”(ID:cso_pmo) 关于我们 我们面临的挑战 敏捷开发是以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.先把一个大项目分 ...
- ProcessExplorer 工具下载
链接:https://pan.baidu.com/s/1RPYkFqIMvBX2OKvTm0bgkw 提取码:4v5v
- js解决客户端与服务器时间不一致的问题
引出 最近在写一个项目时,要根据时间进行不同的展示,直接用new Date().getTime()获取当前时间,结果就出问题了.有些用户擅自修改自己的本地时间,导致获取到的时间并不是当前时间,尴尬. ...
- BP_Adaboost 模型及其分类应用
一.BP_ Adaboost模型 Adaboost 算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为 : (1)首先给出弱学习算法和样本空间(x, y) ,从样本空间中找出 m 组训 ...