美文网首页
java对象比较排序

java对象比较排序

作者: 墨色尘埃 | 来源:发表于2017-07-24 18:55 被阅读0次

问题:点击某个闭合多边形内部,比较点击点距离各条边的距离,取出距离最短的那条线的两个坐标点?
思路:根据方法得到点到直线的距离,将point1、point2、distance放到一个对象TwoPointDistance中,再将TwoPointDistance放入集合中,对TwoPointDistance进行对象排序(根据distance),排序后的集合第一个对象或者最后一个对象即是。

java对象比较排序
在项目开发中,我们经常要对一组数据排序,或者升序或者降序,在java中排序有多种方式,最土的方法就是自己写排序算法,比如冒泡排序,快速排序,二叉树排序等,但一般不要自己写,jdk已经为我们提供了很多的 排序算法,我们采用拿来主义就成了。
在java中,要给数据排序,有两种实现方式,分别实现两个接口:
一种是实现Comparable接口
另一种是实现Comparator接口
在JDK类库中,有一部分类实现了Comparable接口,如Integer Double和String等。
Comparable接口有一个comparTo(Object o)方法,它返回整数类型。对于表达式x.compareTo(y),如果返回值为0,则表示x和y相等,如果返回值大于0,则表示x大于y,如果返回值小于0,则表示x小于y.

Paste_Image.png
查看Comparable接口源码
public interface Comparable<T> {
    public int compareTo(T o);
}

举个例子:给公司职员排序,按照工号排序,先定义一个职员类
编写Employee类实现Comparable接口

public class Employee implements Comparable<Employee>{
    //id是根据进入公司的先后顺序编码的
    private int id;
    //姓名
    private String name;
    //职位
    private Position position;
    public Employee(int id, String name, Position position) {
        super();
        this.id = id;
        this.name = name;
        this.position = position;
    }
    //按照id号排序,也就是资历的深浅排序
    @Override
    public int compareTo(Employee o) {
        // TODO Auto-generated method stub
        return new CompareToBuilder().append(id, o.id).toComparison();
    }
    @Override
    public String toString(){
         return ToStringBuilder.reflectionToString(this);
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Position getPosition() {
        return position;
    }

    public void setPosition(Position position) {
        this.position = position;
    }
}

这是一个简单的javabean,描述的是一个员工的基本信息,其中id是员工编号,按照进入公司的先后顺序编码,position是岗位描述,表示是经理还是普通职员,这是一个枚举类型:

public enum Position {
  Boss, Manager,staff
}

职位有三个级别:Boss(老板), Manager(经理), Staff(职员)。按id排序
Employee类的compareTo()方法,是Comparable接口必须要实现的方法,使用apach的工具类来实现,表明是按照id的自然序列排序的(升序)。一切准备完毕,我们看看如何排序:

public class HelloWord {

    public static void main(String[] args) {
        List<Employee> list = new ArrayList<Employee>(5);
        // 一个老板
        list.add(new Employee(1001, "张三", Position.Boss));
        // 两个经理
        list.add(new Employee(1006, "赵四", Position.Manager));
        list.add(new Employee(1003, "王五", Position.Manager));
        // 两个职员
        list.add(new Employee(10002, "李六", Position.staff));
        list.add(new Employee(1005, "马牛", Position.staff));
        // 按照id排序,也就是按照资历深浅排序
        Collections.sort(list);
        for (Employee e : list) {
            System.out.println(e);
        }
    }
}

【运行结果】:

hello.Employee@46244bb9[id=1001,name=张三,position=Boss]
hello.Employee@4b5d7792[id=1003,name=王五,position=Manager]
hello.Employee@3e0a765c[id=1005,name=马牛,position=staff]
hello.Employee@7fbb6976[id=1006,name=赵四,position=Manager]
hello.Employee@6909037d[id=10002,name=李六,position=staff]

相关文章

  • java对象比较排序

    问题:点击某个闭合多边形内部,比较点击点距离各条边的距离,取出距离最短的那条线的两个坐标点?思路:根据方法得到点到...

  • Java 比较器 和 包装类

    Java比较器 背景: 在Java中经常会涉及到多个对象的排序问题,那么就涉及到对象之间的比较 Java中的对象,...

  • Java比较器(对象排序)

    Java实现排序的方式 自然排序:java.lang.Comparable 定制排序:java.lang.Comp...

  • Java中对象的比较

    Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性大小来确定它们之间的大小关系。...

  • Java 排序

    概述 ​对Java对数组对象进行排序,Java对排序问题的处理。Java排序一般包括基础排序和Lambda Com...

  • Java中Comparable与Comparator的区别

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

  • Java对象排序

    实现Comparator接口-->Collections.sort(List, new ComparaObject...

  • 2018-09-18 java中对象的比较

    对象比较 在实际场景中我们需要对对象进行排序,那么涉及到排序,就需要对两个对象进行比较,而两个对象的比较就不能像数...

  • java 对象数组排序

    java对象List集合的排序(基本类型相似); 方法一:使用for循环的方式来进行对象List集合的排序;方法二...

  • 排序算法

    常见排序算法比较 参考资料:各种排序算法比较 参考资料:快速排序算法 必须知道的八大种排序算法【java实现】(一...

网友评论

      本文标题:java对象比较排序

      本文链接:https://www.haomeiwen.com/subject/jxtikxtx.html