- 浏览: 1899503 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
jquery打印指定的div -
GentlemanQc:
...
quartz系列(二)spring3.2.5与quartz2.1.7集群版集成简要说明 -
静夜独窗:
你好,能说一下server.xml增加的配置是怎么影响性能的吗 ...
tomcat7.0性能优化-挑战极限精简版 -
beyondfengyu:
beyondfengyu 写道如果每个客户进程的时间不同步,时 ...
java并发(二十二)分布式锁 -
beyondfengyu:
如果每个客户进程的时间不同步,时间超前的进程是不是更容易得到锁 ...
java并发(二十二)分布式锁
今天在工作的时候,遇到了List排序的问题,所以总结了一下,与大家分享.Collections.sort排序的时候,用到了Comparator接口下面的compare()方法.下面的小例子中,还用到了匿名类技术和泛型,若朋友们看不懂,可以留言提问^-^
compare(Object 对象1,Object 对象2)重写时
1) 若返回负数,则表示 对象1<对象2
2) 若返回0,则表示 对象1=对象2
3) 若返回正数,则表示 对象1>对象2
反过来,在String类中,他有个CompareTo()方法,他的比较结果也是如此
字符串1.CompareTo(字符串2)比较结果
1) 若字符串1<字符串2,则返回负数
2) 若字符串1=字符串2,则返回0
3) 若字符串1>字符串2,则返回正数
恩,确实接口实现的好一些
只不过没办法使用List的相关强大接口了,好像只能通过数组来操作了
谢谢你的意见,多多交流和沟通
compare(Object 对象1,Object 对象2)重写时
1) 若返回负数,则表示 对象1<对象2
2) 若返回0,则表示 对象1=对象2
3) 若返回正数,则表示 对象1>对象2
反过来,在String类中,他有个CompareTo()方法,他的比较结果也是如此
字符串1.CompareTo(字符串2)比较结果
1) 若字符串1<字符串2,则返回负数
2) 若字符串1=字符串2,则返回0
3) 若字符串1>字符串2,则返回正数
//SortList.java import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class SortList { public static void main(String[] args) { // 方法 一 Test // 测试数据 Test t1 = new Test(88, "phl"); Test t2 = new Test(6, "aaa"); Test t3 = new Test(3, "abc"); Test t4 = new Test(5, "aac"); Test t5 = new Test(4, "adc"); Test t6 = new Test(4, "aac"); Test t7 = new Test(4, "aaa"); List<Test> ts = new ArrayList<Test>(); ts.add(t1); ts.add(t2); ts.add(t3); ts.add(t4); ts.add(t5); ts.add(t6); ts.add(t7); // 排序,通过泛型和匿名类来实现 Collections.sort(ts, new Comparator<Test>() { public int compare(Test o1, Test o2) { int result = o1.getId() - o2.getId(); if (result == 0) { result = o1.getName().compareTo(o2.getName()); } return result; } }); // 打印排序结果 Iterator<Test> iterator = ts.iterator(); while (iterator.hasNext()) { Test test = iterator.next(); System.out.println("id=" + test.getId() + ";name=" + test.getName()); } System.out.println("*******************************************"); // 方法 二 Test2 // 测试数据 //Comparable<Test2>[] ts2 = new Test2[5]; Test2[] ts2 = new Test2[5]; ts2[0] = new Test2(11, "phl"); ts2[1] = new Test2(16, "aaa"); ts2[2] = new Test2(21, "adc"); ts2[3] = new Test2(14, "acd"); ts2[4] = new Test2(6, "ada"); java.util.Arrays.sort(ts2); // 打印排序结果 for (int i = 0; i < ts2.length; i++) { System.out.println("id=" + ts2[i].getId() + ";name=" + ts2[i].getName()); } } } // 测试类 class Test { private int id; private String name; public Test(int id, String name) { this.id = id; this.name = name; } 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; } } // 测试类 class Test2 implements java.lang.Comparable<Test2> { private int id; private String name; public Test2(int id, String name) { this.id = id; this.name = name; } // 实现接口比较方法 public int compareTo(Test2 t) { return this.id - t.getId(); } 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; } } /* 输出结果如下 id=3;name=abc id=4;name=aaa id=4;name=aac id=4;name=adc id=5;name=aac id=6;name=aaa id=88;name=phl ******************************************* id=6;name=ada id=11;name=phl id=14;name=acd id=16;name=aaa id=21;name=adc */
评论
3 楼
杀手请杀人
2014-03-12
别听他说用java.lang.Comparable好 其实这样反而破坏对象的封装 你想想也行你还有其他队形需要比较 是不是又要在那个对象里面重写了呢 这样是多余的 而将比较器和对象分离更加合适 我可以拿比较器来比较任何对象 而且你在使用Comparable时候有时候必须得重写object中的equals方法还有hashcode方法 我觉得Comparator更加好说实话
2 楼
85977328
2010-06-22
mercyblitz 写道
让Test实现java.lang.Comparable接口更好。
恩,确实接口实现的好一些
只不过没办法使用List的相关强大接口了,好像只能通过数组来操作了
谢谢你的意见,多多交流和沟通
1 楼
mercyblitz
2010-06-22
让Test实现java.lang.Comparable接口更好。
发表评论
-
java for 的几种用法
2014-12-02 09:59 1261J2SE 1.5提供了另一 ... -
finally不执行的陷阱
2014-05-16 09:23 1127写了个DEMO,说明下finally在System.exit( ... -
URI和URL的区别
2014-03-26 10:38 1298String HttpServletRequest.getRe ... -
Iterator与ListIterator区别
2014-03-23 22:21 1138Iterator:只能正向遍历集合,适用于获取移除元素。Lis ... -
快速失败特性
2014-03-23 22:20 1149从高级别层次来说快速失败是一个系统或软件对于其故障做出 ... -
java继承静态方法复写
2014-03-12 09:28 4422最近和人交流,遇到了这样一个问题,就是继承当中,静态方法复写的 ... -
关于return和finally
2014-03-11 10:19 2837本来return和finally也不是个事。之前看虚拟机运行原 ... -
JVM内存分析系列(十三)内存实践理解
2014-01-22 10:09 3121java堆 包括 新生代:eden,survival(from ... -
JVM内存分析系列(十二)G1垃圾收集器的使用
2014-01-16 17:10 11520Garbage First(G1)致力于在多CPU和大内存服务 ... -
JVM内存分析系列(十一)GC基本情况与CMS垃圾收集器调优
2014-01-16 11:44 11599初始标记 CMS-initial-mark 并发标记 CMS- ... -
eclipse内存优化
2014-02-26 14:00 1547修改eclipse的配置文件,添加或者修改参数如下,其中XX: ... -
远程调试(二)JVM
2014-01-10 11:43 1745从J2SE 1.4.2开始,就已经提出并实现了JavaTM P ... -
JVM内存分析系列(九)JDK监控和故障处理工具
2014-01-08 18:33 2074jps JVM Process Status Tool,显示指 ... -
guava--google----用来替代commons的jar包
2014-01-06 18:21 16833Guava 是一个 Google ... -
JVM内存分析系列(八)垃圾收集器介绍及性能指标
2013-12-30 13:33 2037内存回收的具体实现。 停顿时间越短就越适合需要 ... -
JVM内存分析系列(七)垃圾收集算法
2013-12-30 12:58 1120内存回收的方法论 标记-清除算法 Mark-Sweep 分为 ... -
JVM内存分析系列(六)对象存活判断
2013-12-26 11:10 1138对象存活常用2种算法 引用计数算法 给对象中添加一个 ... -
JVM内存分析系列(五)浅谈finalize()方法
2013-12-28 18:47 1470根搜索算法中不可达对象在回收之前,要进行二次标记。 第 ... -
JVM内存分析系列(四)对象4种引用
2013-12-25 20:07 1324强引用:只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象 ... -
JVM内存分析系列(三)JVM内存模型初步
2013-12-25 17:09 1163根据《Java虚拟机规范(第二版)》的规定,结构如下 1 ...
相关推荐
Java 中 List 排序 Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高...
总结来说,Java中的List可以通过自定义Comparator或者利用泛型和方法引用来实现对象多属性的动态排序。这种技术在处理复杂数据结构时非常有用,使得代码更加简洁且易于维护。通过学习和实践这部分内容,开发者可以...
JAVA SortList 通用排序类 从网上搜到一个java 对 List 排序的工具,自己改了下 支持 整数 和 浮点数 比较后排序,浮点数小数部分的有点问题,期待大牛帮忙优化。
Java中List对象列表实现去重或取出及排序的方法 在Java中,对List对象列表实现去重或取出及排序是一种常见的操作。下面将详细介绍相关的方法和实现。 1. 实体类重写equals和hashCode方法 在Java中,想要去重List...
Java集合框架中的`List`接口提供了一个`sort(Comparator<? super E> comparator)`方法,可以接受一个比较器(Comparator)来定义自定义的排序规则。默认情况下,Java使用自然排序,即按照字符串的Unicode值进行排序...
java List排序工具类 使用示例: new OrderUtils().order(list, "name", OrderUtils.DESC); 相关实例代码: public static void main(String[] args) { List<Person> list = getData(); // 获取无序数据 new ...
总结起来,`Collections.sort()`是Java中对List进行排序的标准工具,它支持自然排序和自定义排序。了解其工作原理和优化技巧,可以帮助我们在编程实践中更高效地处理数据。通过阅读和理解`Collections.sort()`的源码...
### Java 中文姓氏排序详解 #### 一、引言 ...通过上述代码示例,我们可以看到如何在 Java 中实现对含有中文姓名的数据进行排序。这在处理中文数据时非常有用,尤其是在需要按特定顺序显示数据的应用场景中。
下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...
在Java中,我们可以使用Comparable接口来实现自定义排序。例如,我们可以创建一个Record类,实现Comparable接口,并重写compareTo方法。在compareTo方法中,我们可以使用String的compareTo方法来比较两个字符串的...
在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...
在Java中,可以使用`File[] listFiles()`方法获取目录下的所有文件,然后通过`Arrays.sort()`排序,但默认是区分大小写的。若要实现不区分大小写的排序,需自定义比较器: ```java Arrays.sort(files, new ...
Java提供了一个强大的工具类 Collections,它提供了sort方法来对List排序。同时,我们还需要使用Comparator接口来定义排序规则。在这个例子中,我们使用匿名内部类来实现Comparator接口: ```java Collections.sort...
总的来说,`Collections` 类提供的排序功能使得在 Java 中对 `List` 进行操作变得更加便捷,无论是自然排序还是定制排序,都可以轻松实现。同时,随着 Java 8 及更高版本的引入,流API也提供了新的排序方式,开发者...
在Java编程中,`List`接口是集合框架的一部分,提供了有序、可重复的元素存储功能。当我们需要对`List`中的元素进行排序时,可以利用Java提供的内置排序机制。本篇将详细介绍如何根据指定字段对`List`中的对象进行...
实现这个功能的一种方法是遍历List,将所有节点构建成一棵树,然后采用深度优先搜索(DFS)或广度优先搜索(BFS)来获取排序后的节点列表。遍历过程中,可以使用HashMap或其他数据结构暂存节点及其子节点,以便于...
### Java中进行集合排序 在Java编程中,对集合(如`List`)中的对象进行排序是一项常见的操作。...通过上述知识点的介绍,我们可以看到,在Java中实现集合的排序非常灵活且功能强大,能够满足不同场景下的需求。
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...
在Java编程中,Stream API是Java 8引入的一个强大特性,...无论是在简单的日期列表还是复杂的数据结构中,都可以轻松地实现排序功能。实践过程中,可以根据实际需求选择合适的日期类型和排序规则,使代码更加简洁易读。
3. "strokesort.jar"是一个Java可执行文件,很可能就是实现了汉字笔画排序功能的程序,用户可以直接运行查看其功能。 4. "readme.txt"通常是一个说明文件,会提供有关如何使用这些文件、程序的说明,以及可能的依赖...