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学习

    python学习—字符编码 例如汉字“中” 十进制:20013 二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六进 ...

  2. 003.2---asyncio模块(上)

    asyncio(上) asyncio 的几个概念 event_loop(事件循环):程序开启一个无线的循环,程序员会把一些函数(协程)注册到事件循环上,当满足事件发生的时候,调用相应的协程函数. co ...

  3. Linux入门第四天——shell基础

    一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...

  4. 20155338 2016-2017-2 《Java程序设计》第3周学习总结

    20155338 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 本周学习量比较多,但是知识点并不是特别难,学习了书本的第四五章,其中个人重点学习了数组对象. ...

  5. Android开发——LinearLayout和RelativeLayout的性能对比

    0. 前言 我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\ ...

  6. PostgreSQL Streaming Replication的FATAL ERROR

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面: PostgreSQL集群方案相关索引页     回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@gm ...

  7. win32api 找不到指定的模块

    pywin32 安装后 import win32api 出现ImportError: DLL load failed: 找不到指定的模块 解决方法: 拷贝 C:\Python26\Lib\site-p ...

  8. 【BZOJ4362】isn

    [BZOJ4362]isn 题面 bzoj 题解 设\(f[i][j]\)表示当前在\(i\),长度为\(j\)的最长不降子序列有多少个 这个可以用树状数组\(n^2logn\)求出 设\(g[i]\ ...

  9. Ceph学习之路(一)之ceph初识

    一.元数据和元数据管理 (1)元数据 在学习Ceph之前,需要了解元数据的概念.元数据又称为中介数据.中继数据,为描述数据的数据.主要描述数据属性的信息,用来支持如指示存储位置.历史数据.资源查找.文 ...

  10. STM32L476的RTC使用问题记录

    1. 在使用RTC的时间戳,从字面意思是,PC13的上升沿可以触发时间戳的中断函数 /*##-1- Configure the Time Stamp peripheral ############## ...