java如何对ArrayList中对象按照该对象某属性排序

(从小到大)

两种方法:

方法一:
Comparator<KNNNode> comparator = new Comparator<KNNNode>() { @Override
public int compare(KNNNode o1, KNNNode o2) {
System.out.println("进入 compare function");
// TODO Auto-generated method stub
if (o1.getDistance() <= o2.getDistance()) {//o1属性小于等于o2属性时,返回1
return 1;
} else {
return -1;
}
} };

调用方法:

List<KNNNode> nodelist = new ArrayList<KNNNode>();
//此处需要填充nodelist.add();
Collections.sort(nodelist, comparator);// 调用
方法二:
class SortBy implements Comparator {
public int compare(Object obj1, Object obj2) {
KNNNode point1 = (KNNNode) obj1;
KNNNode point2 = (KNNNode) obj2;
if (point1.getDistance() <= point2.getDistance()) {
return 1;
} else {
return 0;
}
}
}

调用方法:

Collections.sort(nodelist, new SortBy());

KNNNode结点内的属性:

package newKNN;

/**
* KNN结点类,用来存储最近邻的k个元组相关的信息
*/
public class KNNNode {
private int index; // 元组标号
private double distance; // 与测试元组的距离
private String seq;//滑动窗口motif序列片段 public KNNNode(int index, double distance, String seq) {
super();
this.index = index;
this.distance = distance;
this.seq = seq; }
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public String getSeq() {
return seq;
}
public void setSeq(String seq) {
this.seq = seq;
} }

我想要按照KNNNode的distance属性排序。

若要按照从大到小的顺序排序,如果只是将

>=返回值改为-1

<返回值改为1 会出现异常。

Comparison method violates its general contract!

 原因是是实现接口Comparator 的类有问题在compare中没有处理好两个比较的对象相等的情况

public int compare(KNNNode o1, KNNNode o2);

即 o1.getDistance() == o2.getDistance() 时,返回值不是0

我最终的实现代码是:(从大到小排序)

Comparator<KNNNode> comparator = new Comparator<KNNNode>() {

		@Override
public int compare(KNNNode o1, KNNNode o2) {
// TODO Auto-generated method stub
if (o1.getDistance() < o2.getDistance()) {
return 1;
} else if(o1.getDistance() > o2.getDistance()){
return -1;
}else{
return 0;
}
} };

参考列表:

http://blog.csdn.net/telenewbie/article/details/45061089

http://www.cnblogs.com/xujian2014/p/5215082.html

http://www.cnblogs.com/fzzl/archive/2010/08/14/1799408.html

【Java】对ArrayList排序的更多相关文章

  1. JAVA对ArrayList排序

    ava如何对ArrayList中对象按照该对象某属性排序 增加排序功能,打印时:输出学生对象的时候,需要先按照年龄排序,如果年龄相同,则按照姓名排序,如果姓名也相同,则按照学号排序. Code hig ...

  2. java 使用 ArrayList 排序【包括数字和字符串】

    1.数字排序 /** * 数字排序 */ @Test public void t2() { List<Integer> list = new ArrayList<>(); li ...

  3. Java ArrayList排序方法详解

    由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...

  4. 【BigData】Java基础_定义工具类,对ArrayList排序并且求最大值、最小值、平均值

    需求描述 编写一个工具类,对ArrayList实现以下功能: ① 排序 ② 求最大值 ③ 求最小值 ④ 求平均值 需求实现 实现代码 package cn.test.logan.day04; impo ...

  5. java@ 利用ArrayList实现dijkstra算法以及topological 排序算法(java.util.ArrayList)

    package dataStructure; import java.util.ArrayList; import java.util.LinkedList; import java.util.Que ...

  6. java List的排序

    List自定义排序 1.第一种方法,就是list中对象实现Comparable接口,重写compareTo接口, 对排序的字段进行比较.2.第二种方法,就是在重载Collections.sort方法. ...

  7. Java的List排序

    有时需要对List排序,这时可以利用Collections的sort()方法来排序,不用自己再去排序. package myTest; import java.util.ArrayList; impo ...

  8. ArrayList排序

    今天发现,ArrayList 排序不满足期望. 起先,List是这样Before sort: [1, @I, am, Love, java, very, Much] 使用Collections.sor ...

  9. java 16-1 ArrayList的练习1

    需求: ArrayList去除集合中字符串的重复值(去掉相同的字符串) 分析: 第一种做法:创建一个新的空集合: A:创建1个具有相同字符串的集合 B:创建1个空的集合 C:遍历第一个集合里面的元素 ...

  10. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

随机推荐

  1. 跟着马哥学python-day02

    1. 运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算. 1.1 算数运算 以下假设变量:a=10,b= ...

  2. Websocket 临时参考网站

    https://blog.csdn.net/SGuniver_22/article/details/74273839 https://www.zhihu.com/question/20215561 h ...

  3. 基于FPGA的DDS设计(二)

    在DDS设计中,如果相位累加器每个时钟周期累加1,就会输出频率为195.313KHz的波形.如果每个时钟周期累加2,就会输出频率为2*195.313KHz的波形·······,如果每两个时钟周期累加1 ...

  4. #define定义数据溢出的问题

    使用合泰单片机做一个小东西,使用 #define TIMER_COUNT (30*60*1000) 时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样.看来是stm32用多了,总以为#d ...

  5. C# 访问修饰符和const、readonly

    今天被人问起const和readonly,竟然有点咬不准,复习一遍. 访问修饰符 public 公有访问.不受任何限制. private 私有访问.只限于本类成员访问,子类,实例都不能访问. prot ...

  6. Mybash实现

    Mybash实现 知识储备: feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()清除. 创 ...

  7. sql语句-4-子查询

  8. python-编程从入门到实践

    python-编程从入门到实践 1.python文件后缀名: .py 是Python的源码文件,由Python.exe解释. .pyc 是Python的编译文件.pyc 文件往往代替 py 文件发布: ...

  9. 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...

  10. 基于marathon-lb的服务自发现与负载均衡

    参考文档: Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/ 参考:http://www.cnblogs.co ...