0 0

部分排序(Comparable)怎么做0

import java.util.Date;

public class User implements Comparable<User>
{

	private Integer userid;
	
	//年龄
	private Integer age;
	
	//注册日期
	private Date regDate;

	/**
	 * 1 :首先,把age=30的拿出来,先排序,regDate大的排序在前面
	 * 2 :然后,排序age!=30的,regDate大的排序在前面 
	 */
	public int compareTo(User o)
	{
		return 0;
	}

}


排序逻辑见上面的注释

比如说,有如下数据
1  20 2013-01-21
2  30 2013-04-25
3  19 2013-11-14
4  55 2013-03-16
5  30 2013-02-20

排序后的结果为:

2  30 2013-04-25
5  30 2013-02-20
3  19 2013-11-14
4  55 2013-03-16
1  20 2013-01-21

请问,怎么做
2014年7月31日 16:38

4个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;

public class User implements Comparable<User> {

private Integer userid;

// 年龄
private Integer age;

// 注册日期
private Date regDate;

public User(Integer userid, Integer age, Date regDate) {
this.userid=userid;
this.age=age;
this.regDate=regDate;
}

/**
* 1 :首先,把age=30的拿出来,先排序,regDate大的排序在前面 2 :然后,排序age!=30的,regDate大的排序在前面
*/
@Override
public int compareTo(User o) {
if (this.age == 30 && o.age == 30) {
return o.regDate.compareTo( this.regDate);
} else if (this.age == 30) {
return -1;
} else if (o.age == 30) {
return 1;
} else {
return o.regDate.compareTo(this.regDate);
}
}

@Override
public String toString() {
return this.userid+" "+this.age+" ";
}

public static void main(String[] args) throws ParseException {
/*
* 1 20 2013-01-21 2 30 2013-04-25 3 19 2013-11-14 4 55 2013-03-16 5 30
* 2013-02-20
*/

ArrayList<User> list = new ArrayList<User>();
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
User u1 = new User(1, 20, format1.parse("2013-01-21"));
User u2 = new User(2, 30, format1.parse("2013-04-25"));
User u3 = new User(3, 19, format1.parse("2013-11-14"));
User u4 = new User(4, 55, format1.parse("2013-03-16"));
User u5 = new User(5, 30, format1.parse("2013-02-20"));
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);

System.out.println(list);
Collections.sort(list);
System.out.println(list);

}

}

2014年7月31日 18:34
0 0

现在很流行直接要代码。。。。

2014年8月02日 15:22
0 0

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;

public class User implements Comparable<User> {

	// id
	private Integer userid;

	// 年龄
	private Integer age;

	// 注册日期
	private Date regDate;

	public User(Integer userid, Integer age, Date regDate) {
		this.userid = userid;
		this.age = age;
		this.regDate = regDate;
	}
	@Override
	public int compareTo(User u) {
		if (this.age == 30 && u.age == 30) {
			return u.regDate.compareTo(this.regDate);
		} else if (this.age == 30) {
			return -1;
		} else if (u.age == 30) {
			return 1;
		} else {
			return u.regDate.compareTo(this.regDate);
		}
	}

	@Override
	public String toString() {
		return this.userid + " " + this.age + " "
				+ new SimpleDateFormat("yyyy-MM-dd").format(this.regDate);
	}

	public static void main(String[] args) throws ParseException {
		ArrayList<User> list = new ArrayList<User>();
		DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
		User u1 = new User(1, 20, format1.parse("2013-01-21"));
		User u2 = new User(2, 30, format1.parse("2013-04-25"));
		User u3 = new User(3, 19, format1.parse("2013-11-14"));
		User u4 = new User(4, 55, format1.parse("2013-03-16"));
		User u5 = new User(5, 30, format1.parse("2013-02-20"));
		list.add(u1);
		list.add(u2);
		list.add(u3);
		list.add(u4);
		list.add(u5);

		print(list,"排序前");
		Collections.sort(list);
		print(list,"排序后");

	}

	public static void print(ArrayList<User> l, String comment) {
		System.out.println(comment);
		for (User u : l) {
			System.out.println(u);
		}
	}

}


结果
引用
排序前
1 20 2013-01-21
2 30 2013-04-25
3 19 2013-11-14
4 55 2013-03-16
5 30 2013-02-20
排序后
2 30 2013-04-25
5 30 2013-02-20
3 19 2013-11-14
4 55 2013-03-16
1 20 2013-01-21


分数给 sprite311 吧 ……   需求是上帝啊

2014年8月01日 09:33
0 0

排序前:

1  20 2013-01-21
2  30 2013-04-25
3  19 2013-11-14
4  55 2013-03-16
5  30 2013-02-20

排序后:
2  30 2013-04-25
5  30 2013-02-20
3  19 2013-11-14
4  55 2013-03-16
1  20 2013-01-21
排序后怎么看 都好像是排序前 而 排序前看着 好像是排序号
哥们是不是你的一些字段还没有放出来啊?

2014年7月31日 18:35

相关推荐

    java,Comparable接口实例

    强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不...

    java实现的map排序

    当创建TreeMap实例时,它会根据键的自然顺序(实现了Comparable接口)或者通过在创建TreeMap时提供的Comparator来排序键。 代码中创建了一个HashMap实例,并插入了一些键值对。然后通过一个自定义的方法...

    Android里List时间升序排序

    这是一个通用的方法,可以对任何实现了`Comparable&lt;T&gt;`接口的集合进行排序。在我们的例子中,`String`类已经实现了`Comparable&lt;String&gt;`接口,因此我们可以直接对`List&lt;String&gt;`进行排序。然而,`Collections.sort()...

    [线程技术]排序对象

    在Java编程中,线程技术是处理并发执行任务的关键部分,而排序对象是常见的数据处理需求。本示例代码提供了一个简单的线程安全的排序方法,适用于数组中的对象。我们来详细解析一下这段代码及其涉及的知识点。 首先...

    listview按照内部item的时间属性排序

    对于时间排序,可以这样做: ```java List&lt;MyItem&gt; itemList = ... // 获取数据列表 // 使用自定义的Comparator进行降序排序 Collections.sort(itemList, new Comparator() { @Override public int compare...

    排序排序 array to object?? attachment

    此外,自定义对象的排序则需要实现`Comparable`接口或者提供一个`Comparator`。例如,假设有一个`Person`类,我们可以通过如下方式实现按姓名排序: ```java class Person implements Comparable&lt;Person&gt; { String...

    ArraySort排序

    本文将深入探讨两种主要的排序方法:实现`Comparator`接口和实现`Comparable`接口。 首先,让我们理解数组的基本概念。在Java中,数组是一种有序的数据集合,可以存储相同类型的数据元素。它们在内存中占据连续的...

    java排序算法大全

    它的工作原理是每一次从未排序的部分寻找最小(或最大)元素,存放到排序序列的起始位置。直到所有元素均排序完毕。 **算法步骤:** 1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2. 再从...

    一道面试题的代码:数组合并和排序

    例如,如果数组已经部分排序,插入排序可能会更快;而快速排序在大多数情况下表现优秀,但最坏情况下性能会退化。 在实际开发中,了解和掌握这些基本操作对优化代码性能、解决复杂问题至关重要。对于面试者来说,...

    java类排序,很实用

    例如,如果你要根据年龄而非姓名排序,你可以这样做: ```java Arrays.sort(stus, new Comparator() { @Override public int compare(Student o1, Student o2) { return Integer.compare(o1.getAge(), o2....

    Java读取文件并对其排序后重新写入文件

    这里我们可以用`Collections.sort()`对`ArrayList`进行排序,但前提是列表元素是可比较的(实现了`Comparable`接口)。如果数据是自定义对象,我们需要提供一个`Comparator`。例如,如果`b.txt`里的每一行都是一个...

    常见排序算法(Java实现)

    ### 常见排序算法(Java实现) #### 冒泡排序 **思想:** 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到...

    java 排序等问题

    这些方法默认使用自然排序,即元素自身实现Comparable接口定义的比较规则。 但是,当我们需要自定义排序规则时,Comparator接口就发挥了作用。Comparator接口提供了一个compare()方法,用于比较两个对象并返回一个...

    做一个集合类,并按索引二分法查找,继承IComparer、IComparable、ICollection

    在.NET框架中,`IComparer`、`IComparable`和`ICollection`接口是面向对象编程中常见的接口,用于实现自定义排序、比较和集合管理。本文将深入探讨这些接口的用法以及如何在一个集合类中实现它们,同时结合二分法...

    List中保存对象,按对象中某一属性排序【含程序源码】

    要按对象的特定属性(如`score`)排序,首先需要确保这个属性是可比较的,即它是一个基本数据类型(如整数或字符串)或者实现了Comparable接口(对于Java)。对于Python,可以使用`lambda`表达式或自定义排序函数。...

    java实验报告实验3答案.pdf

    Map接口不支持直接排序,但可以通过实现Comparable接口或提供Comparator来对key或value进行排序。然后向Map中添加新的键值对[(3, 6)],观察排序结果的变化。理解Map的特性,即它不是有序的,插入顺序可能不会影响...

    CSC212Sorting:排序(但主要是MergeSort)

    尽管可以这样做,但不需要为每种排序算法使用单独的测试文件。 尽管我们在课堂上讨论了Comparable和Comparator,但此处的排序算法仅需要对ListADT&lt;Integer&gt; ,就像提供的bubbleSort一样。没有提供签名。您将必须决定...

    Java毕业生校外实习日记.doc

    * 数组列表(ArrayList):可以排序,需要提供比较器(Comparator)或者实现 Comparable 接口 * linkedList:有序的链表,可以排序 * Vector:线程安全的集合,可以排序 * Set:无序、不可重复的集合 + HashSet:不...

    初级java笔试题-Sorting-Algorithm-Analysis:七种排序算法的简单分析

    初级java笔试题排序算法分析 排序元组 七种排序算法的简单分析 ...数据的类型,我们的排序算法只有在开启Comparable接口的情况下,才能和它处理的items一样有效。 推导出这三个原则,我们可以在衡量一个算法的效率时得

    策略模式代码

    这样做的好处是算法的变化不会影响到使用算法的客户代码,即实现了开闭原则。 在描述中提到的"策略模式代码"是指一个具体的实现,可能是通过Java编程语言来演示如何运用策略模式。"排序"是策略模式的一个常见应用...

Global site tag (gtag.js) - Google Analytics