-
部分排序(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个答案 按时间排序 按投票排序
-
采纳的答案
引用
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
-
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
-
排序前:
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
相关推荐
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不...
当创建TreeMap实例时,它会根据键的自然顺序(实现了Comparable接口)或者通过在创建TreeMap时提供的Comparator来排序键。 代码中创建了一个HashMap实例,并插入了一些键值对。然后通过一个自定义的方法...
这是一个通用的方法,可以对任何实现了`Comparable<T>`接口的集合进行排序。在我们的例子中,`String`类已经实现了`Comparable<String>`接口,因此我们可以直接对`List<String>`进行排序。然而,`Collections.sort()...
在Java编程中,线程技术是处理并发执行任务的关键部分,而排序对象是常见的数据处理需求。本示例代码提供了一个简单的线程安全的排序方法,适用于数组中的对象。我们来详细解析一下这段代码及其涉及的知识点。 首先...
对于时间排序,可以这样做: ```java List<MyItem> itemList = ... // 获取数据列表 // 使用自定义的Comparator进行降序排序 Collections.sort(itemList, new Comparator() { @Override public int compare...
此外,自定义对象的排序则需要实现`Comparable`接口或者提供一个`Comparator`。例如,假设有一个`Person`类,我们可以通过如下方式实现按姓名排序: ```java class Person implements Comparable<Person> { String...
本文将深入探讨两种主要的排序方法:实现`Comparator`接口和实现`Comparable`接口。 首先,让我们理解数组的基本概念。在Java中,数组是一种有序的数据集合,可以存储相同类型的数据元素。它们在内存中占据连续的...
它的工作原理是每一次从未排序的部分寻找最小(或最大)元素,存放到排序序列的起始位置。直到所有元素均排序完毕。 **算法步骤:** 1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2. 再从...
例如,如果数组已经部分排序,插入排序可能会更快;而快速排序在大多数情况下表现优秀,但最坏情况下性能会退化。 在实际开发中,了解和掌握这些基本操作对优化代码性能、解决复杂问题至关重要。对于面试者来说,...
例如,如果你要根据年龄而非姓名排序,你可以这样做: ```java Arrays.sort(stus, new Comparator() { @Override public int compare(Student o1, Student o2) { return Integer.compare(o1.getAge(), o2....
这里我们可以用`Collections.sort()`对`ArrayList`进行排序,但前提是列表元素是可比较的(实现了`Comparable`接口)。如果数据是自定义对象,我们需要提供一个`Comparator`。例如,如果`b.txt`里的每一行都是一个...
### 常见排序算法(Java实现) #### 冒泡排序 **思想:** 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到...
这些方法默认使用自然排序,即元素自身实现Comparable接口定义的比较规则。 但是,当我们需要自定义排序规则时,Comparator接口就发挥了作用。Comparator接口提供了一个compare()方法,用于比较两个对象并返回一个...
在.NET框架中,`IComparer`、`IComparable`和`ICollection`接口是面向对象编程中常见的接口,用于实现自定义排序、比较和集合管理。本文将深入探讨这些接口的用法以及如何在一个集合类中实现它们,同时结合二分法...
要按对象的特定属性(如`score`)排序,首先需要确保这个属性是可比较的,即它是一个基本数据类型(如整数或字符串)或者实现了Comparable接口(对于Java)。对于Python,可以使用`lambda`表达式或自定义排序函数。...
Map接口不支持直接排序,但可以通过实现Comparable接口或提供Comparator来对key或value进行排序。然后向Map中添加新的键值对[(3, 6)],观察排序结果的变化。理解Map的特性,即它不是有序的,插入顺序可能不会影响...
尽管可以这样做,但不需要为每种排序算法使用单独的测试文件。 尽管我们在课堂上讨论了Comparable和Comparator,但此处的排序算法仅需要对ListADT<Integer> ,就像提供的bubbleSort一样。没有提供签名。您将必须决定...
* 数组列表(ArrayList):可以排序,需要提供比较器(Comparator)或者实现 Comparable 接口 * linkedList:有序的链表,可以排序 * Vector:线程安全的集合,可以排序 * Set:无序、不可重复的集合 + HashSet:不...
初级java笔试题排序算法分析 排序元组 七种排序算法的简单分析 ...数据的类型,我们的排序算法只有在开启Comparable接口的情况下,才能和它处理的items一样有效。 推导出这三个原则,我们可以在衡量一个算法的效率时得
这样做的好处是算法的变化不会影响到使用算法的客户代码,即实现了开闭原则。 在描述中提到的"策略模式代码"是指一个具体的实现,可能是通过Java编程语言来演示如何运用策略模式。"排序"是策略模式的一个常见应用...