`
85977328
  • 浏览: 1899503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中List的排序功能的实现

阅读更多
    今天在工作的时候,遇到了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,则返回正数

//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
 */
1
3
分享到:
评论
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中list排序

    Java 中 List 排序 Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高...

    java List中对象多属性排序及各属性排序设置

    总结来说,Java中的List可以通过自定义Comparator或者利用泛型和方法引用来实现对象多属性的动态排序。这种技术在处理复杂数据结构时非常有用,使得代码更加简洁且易于维护。通过学习和实践这部分内容,开发者可以...

    JAVA SortList 通用排序类

    JAVA SortList 通用排序类 从网上搜到一个java 对 List 排序的工具,自己改了下 支持 整数 和 浮点数 比较后排序,浮点数小数部分的有点问题,期待大牛帮忙优化。

    java中List对象列表实现去重或取出及排序的方法

    Java中List对象列表实现去重或取出及排序的方法 在Java中,对List对象列表实现去重或取出及排序是一种常见的操作。下面将详细介绍相关的方法和实现。 1. 实体类重写equals和hashCode方法 在Java中,想要去重List...

    java中文排序,数字字母汉字排序

    Java集合框架中的`List`接口提供了一个`sort(Comparator&lt;? super E&gt; comparator)`方法,可以接受一个比较器(Comparator)来定义自定义的排序规则。默认情况下,Java使用自然排序,即按照字符串的Unicode值进行排序...

    java List排序工具类

    java List排序工具类 使用示例: new OrderUtils().order(list, "name", OrderUtils.DESC); 相关实例代码: public static void main(String[] args) { List&lt;Person&gt; list = getData(); // 获取无序数据 new ...

    java List 排序 Collections.sort

    总结起来,`Collections.sort()`是Java中对List进行排序的标准工具,它支持自然排序和自定义排序。了解其工作原理和优化技巧,可以帮助我们在编程实践中更高效地处理数据。通过阅读和理解`Collections.sort()`的源码...

    java 中文姓氏 排序

    ### Java 中文姓氏排序详解 #### 一、引言 ...通过上述代码示例,我们可以看到如何在 Java 中实现对含有中文姓名的数据进行排序。这在处理中文数据时非常有用,尤其是在需要按特定顺序显示数据的应用场景中。

    java 集合分组与排序

    下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...

    java集合某个字段按照中文拼音排序.docx

    在Java中,我们可以使用Comparable接口来实现自定义排序。例如,我们可以创建一个Record类,实现Comparable接口,并重写compareTo方法。在compareTo方法中,我们可以使用String的compareTo方法来比较两个字符串的...

    Java对List多个排序、查询条件的处理

    在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...

    文件按照window 的排序规则-Java实现

    在Java中,可以使用`File[] listFiles()`方法获取目录下的所有文件,然后通过`Arrays.sort()`排序,但默认是区分大小写的。若要实现不区分大小写的排序,需自定义比较器: ```java Arrays.sort(files, new ...

    java 中List按照date排序的实现

    Java提供了一个强大的工具类 Collections,它提供了sort方法来对List排序。同时,我们还需要使用Comparator接口来定义排序规则。在这个例子中,我们使用匿名内部类来实现Comparator接口: ```java Collections.sort...

    java 使用Collections类对List的排序操作

    总的来说,`Collections` 类提供的排序功能使得在 Java 中对 `List` 进行操作变得更加便捷,无论是自然排序还是定制排序,都可以轻松实现。同时,随着 Java 8 及更高版本的引入,流API也提供了新的排序方式,开发者...

    java List排序demo

    在Java编程中,`List`接口是集合框架的一部分,提供了有序、可重复的元素存储功能。当我们需要对`List`中的元素进行排序时,可以利用Java提供的内置排序机制。本篇将详细介绍如何根据指定字段对`List`中的对象进行...

    list集合树状排序-java

    实现这个功能的一种方法是遍历List,将所有节点构建成一棵树,然后采用深度优先搜索(DFS)或广度优先搜索(BFS)来获取排序后的节点列表。遍历过程中,可以使用HashMap或其他数据结构暂存节点及其子节点,以便于...

    java中进行集合排序

    ### Java中进行集合排序 在Java编程中,对集合(如`List`)中的对象进行排序是一项常见的操作。...通过上述知识点的介绍,我们可以看到,在Java中实现集合的排序非常灵活且功能强大,能够满足不同场景下的需求。

    Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...

    java使用stream对日期排序

    在Java编程中,Stream API是Java 8引入的一个强大特性,...无论是在简单的日期列表还是复杂的数据结构中,都可以轻松地实现排序功能。实践过程中,可以根据实际需求选择合适的日期类型和排序规则,使代码更加简洁易读。

    java汉字笔画排序源码

    3. "strokesort.jar"是一个Java可执行文件,很可能就是实现了汉字笔画排序功能的程序,用户可以直接运行查看其功能。 4. "readme.txt"通常是一个说明文件,会提供有关如何使用这些文件、程序的说明,以及可能的依赖...

Global site tag (gtag.js) - Google Analytics