package com;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Sort {
public Sort() { }
public static void main(String[] args) {
List<User> list = new ArrayList<User> ();
User u1 = new User("a",21,0);
User u2 = new User("b",21,2);
User u3 = new User("c",21,4);
User u4 = new User("d",21,1);
User u5 = new User("e",21,3);
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
int len = list.size();
System.out.println("排序前:");
for(int i=0;i<len;i++){
User u = list.get(i);
System.out.print(u.getOrder()+" ");
}
//Collections.sort(list,new UserCompator()); //Collections类的的静态sort方法,传递一个compator对象
Collections.sort(list);
//实现倒叙
System.out.println("\n排序后:");
for(int i=0;i<len;i++){
User u = list.get(i);
System.out.print(u.getOrder()+" ");
}
//实现倒叙
Collections.reverse(list);//Collections类的静态reverse方法
System.out.println("\n倒叙后:");
for(int i=0;i<len;i++){
User u = list.get(i);
System.out.print(u.getOrder()+" ");
}
}
}
//模拟用户类
//J2EE项目的bean最好都实现可序列化
/*序列化得作用:什么叫序列化?通俗点...就是对你的对象添加一个序列号作为标识(对应内存中相对应的对象),然后流化,
当反序列化的时候,把该对象恢复到内存,如果该对象的序列号和内存中的对象相对应,则恢复到内存中的对象,
否则的化,直接创建一个对象到内存
* */
class User implements Serializable, Comparable<User>{ // Comparable<User>规定,当前的compate方法的参数必须是User
private static final long serialVersionUID = 2802777044952669007L;
private String Name;
private int Age;
private int Order;//排序的属性
public User(){}; //无参构造
//构造
public User(String name,int age,int order){
this.Name = name;
this.Age = age;
this.Order = order;
}
public int getOrder() {
return Order;
}
public void setOrder(int order) {
Order = order;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
//必须重写的方法,而且参数必须是User,声明类的时候已经规定。
public int compareTo(User u ) {
return this.Order-u.getOrder();
}
}
//自定义的compator类,在Collections排序的时候使用(也可以不使用用)
class UserCompator implements Comparator<User>{
public int compare(User o1, User o2) {
return o1.getOrder()-o2.getOrder();
}
}
结果:
排序前:
0 2 4 1 3
排序后:
0 1 2 3 4
倒叙后:
4 3 2 1 0
分享到:
相关推荐
可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
在Java编程中,储存对象并按对象的某个属性进行排序是一项常见的需求。下面将详细介绍三种在Java中实现这一目标的方法,以及如何使用这些方法来优化排序过程。 **第一种方法:使用`TreeSet`** `TreeSet`是Java集合...
Java8 Stream 自定义分组求和并排序的实现 Java8 Stream 自定义分组求和并排序的实现是 Java8 中一个非常重要的知识点,该知识点的实现可以帮助开发者快速地实现分组求和并排序的操作,从而提高开发效率和代码质量...
在实际应用中,我们可能需要对列表中的对象按照它们的某个属性进行排序。这篇博客“List中保存对象,按对象中某一属性排序【含程序源码】”恰好提供了这样的解决方案。下面我们将深入探讨这个主题。 首先,让我们...
总结,实现ListView按照内部item的时间属性排序,关键在于正确地排序数据集并更新适配器。通过自定义Comparator或实现Comparable接口,我们可以根据时间属性轻松实现升序或降序排序。在实际开发中,还需要注意性能...
对于需要根据某个属性(例如年龄)对自定义对象进行排序的情况,可以通过让自定义类实现`Comparable`接口来实现。下面以`Person1`类为例,该类包含姓名和年龄两个属性,并实现`Comparable`接口: ```java class ...
接下来,我们要根据`Student`对象的某个属性进行排序。在Java中,我们可以使用`Collections.sort()`方法结合自定义的`Comparator`来实现这个功能。 1. **按照Int类型属性排序**: 当需要根据`Student`对象的`age`...
对于包含自定义对象的List,可以实现一个比较器(Comparator)来根据对象的特定属性进行去重。 ```java @Test void testRemoveByAttribute1() { List<Player> uniquePlayers = playerList.stream() .distinct...
#### 描述:Java中按对象的某个属性进行升序降序的排序 这段描述进一步明确了排序的目标:即基于对象的一个特定属性来进行升序(ascending order)或降序(descending order)的排序。这在实际开发中非常有用,比如...
然而,当ArrayList中存储的是自定义对象,且这些对象没有实现Comparable接口时,我们就需要提供一个Comparator来指定排序规则。Comparator是一个接口,定义了compare()方法,用于比较两个对象并返回一个整数。我们...
本篇文章将详细讲解如何使用Java 8的Stream API来实现基于某个字段的列表去重。 首先,我们定义一个简单的`Student`类,它包含两个字段:年龄(age)和姓名(name)。这个类使用Lombok库的`@Data`、`@...
本问题中提到的情况就是如何根据对象的一个属性值对List中的对象进行分组,以便每个组包含具有相同属性值的对象。这种操作在处理集合数据时非常常见,例如在报表生成、数据分析或数据显示优化等场景。 首先,这个...
但是,当List中的元素是自定义对象且需要按照对象的某个属性进行排序时,就需要自定义比较器Comparator。 描述中提到的问题在于,如果List包含的是对象而不是基本数据类型,那么直接使用`Collections.sort()`就不够...
其次,如果字段的类型不是基础类型,而是自定义对象,那么需要确保这些对象也实现了`Comparable`接口,以便进行比较。最后,如果字段的值可能为null,还需要额外处理这种情况,避免空指针异常。 在实际开发中,为...
在处理包含多种类型对象的列表时,我们经常需要根据对象的某个或多个属性进行排序。这个过程称为多条件排序或多字段排序。本文将深入探讨如何在Java和Android环境中实现这个功能。 首先,让我们理解基础的排序方法...