作为一名刚上路的超初级程序员,今天终于可以迈开自己的第一步,写一篇博客。把我自己都感动哭了。

今天看面试题时看到了一个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 的使用的更多相关文章

  1. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  2. 12.Java中Comparable接口,Readable接口和Iterable接口

    1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...

  3. 泛型的排序问题(Collections.sort及Comparable的应用)

    一.前言    java中对泛型(集合类型)排序的问题,主要采用了两张方式一种是对要排序的实体类,实现Comparable接口,另一种方式,Collections集合工具类进行排序. 二.实现Comp ...

  4. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

  5. 对象比较器:Comparable和Comparator

    在进行对象数组排序的过程中需要使用到比较器,比较器有两个:Comparable和Comparator ①.java.lang.Comparable:是在类定义是时候默认实现好的接口,里面提供有一个co ...

  6. java中的Comparable接口

    类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...

  7. java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)

    import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...

  8. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  9. Comparable和Comparator的区别

    Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...

  10. java.lang.Comparable<T> 接口

    package java.lang; import java.util.*; public interface Comparable<T> { public int compareTo(T ...

随机推荐

  1. 【设计模式】代理模式-Proxy

    转载:https://www.cnblogs.com/yangchongxing/p/7654725.html 代理模式定义如下: Provide a surrogate or placeholder ...

  2. 2019年12月18日Linux开发手记

    安装idle3: 1.端输入apt install idle3 以安装 2.安装完成后在终端输入idle以启动 配置pip: 1.终端输入apt install python3-pip 使用pip配置 ...

  3. k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)

    之前我们搭建的 k8s 集群只用了1台 master ,可用性不高,这两天开始搭建高可用集群,但由于之前用 kubeadm 命令创建集群时没有使用 --control-plane-endpoint 参 ...

  4. 深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  5. 使用vsCode配合IAR搭建arm开发环境

    众所周知IAR的编辑功能就是个垃圾,但是不得不承认IAR的编译器相当的牛X,经常以稳定可靠而著称,为此我们把VSCODE强大的编辑功能和IAR结合一下来加快我们的开发周期. 一.下载VSCODE并安装 ...

  6. 记mysql条件分支语句CASE WHEN THEN ELSE END的使用

    记一次基于mysql数据库查询时条件分支语句使用 表达式格式:CASE column WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 .... ELSE 表达式 END [ ...

  7. ES6+转ES5(webpack+babel、指定多个js文件、自动注入)

    接续上篇ES6+转ES5,本篇将使用webpack和babel将多个不同目录下指定的多个ES6+语法的js文件编译为ES5,并将编译后的文件配置注入对应的html文件. 所需环境node.npm.设置 ...

  8. Dubbo环境搭建-ZooKeeper注册中心

    场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 注: 博客: https:// ...

  9. springboot windows10风格 activiti 整合项目框架源码 shiro 安全框架 druid

     官网:www.fhadmin.org  此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反双向](单表.主表.明细表.树形表 ...

  10. jTopo HTML5 Canvas 画图组件

    jTopo是什么? jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系.拓扑图形化界面开发工具包. jTopo关注于数据的图形展示,它是面 ...