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. 使用ofstream输出unicode

    void saveWideFileHead(std::ofstream& out)// 写入文件内容前,先写入BOM { char const* const utf16head = " ...

  2. mysql底层实现

    MySQL 的常用引擎 1. InnoDB InnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件. InnoDB 中存在表锁和行 ...

  3. Python3 break与continue

    Infi-chu: http://www.cnblogs.com/Infi-chu/ break和continue都是中断循环的意思,但是他们的中断后的效果不同. 请看如下两个例子就懂了 ''' 这个 ...

  4. 20155206 2016-2017-2 《JAVA程序设计》 第二周学习总结

    20155206 2016-2017-2<JAVA程序设计>第二周学习总结 教材学习内容总结 类型 整数 字节 浮点数 字符 布尔 变量 变量在命名时,不可以使用数字或一些特殊字符:*.& ...

  5. 2017-2018-1 《信息安全技术》实验二——Windows口令破解

    2017-2018-1 <信息安全技术>实验二--Windows口令破解 所用工具 系统:能勾起我回忆的Windows 2003 工具:LC5.SuperDic Windows口令破解 口 ...

  6. 20155316 实验四 《Android程序设计》

    实验1 实验内容 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: ...

  7. 【转载】OGRE中用到的设计模式

    原文:OGRE中用到的设计模式 1.       单例模式(Singleton) 2.       工厂方法(Factory Method)  3.       适配器模式(Adapter)  4.  ...

  8. 创龙OMAPL138的NMI中断

    1. 不可屏蔽中断部分代码,注册中断函数,6748有几个NMI的引脚? void InterruptInit(void) { // 初始化 DSP 中断控制器 IntDSPINTCInit(); // ...

  9. EmitMapper自动映射工具

             在实体与DTO之间,我们一般都需要进行映射.如果手动的来进行转换,实在是太麻烦.所以就产生了很多映射工具,比如AutoMapper,EmitMapper.而经过一些对比,EmitMa ...

  10. html学习第一天

    由于之后想做个网站,所以web前端的也要学习一下. 昨天看了一下html,今天做一下记录. 首先是安装工具,用文本编辑器有点麻烦,我选择的是强大的 Dreamweaver CS6,不过大家喜欢文本编辑 ...