`

Java根据容器(List,ArrayList)内对象的字段排序

阅读更多
用例是这样的:
一个结果集List,里面有很多的对象,要求根据对象的字段进行排序。

算法:
1. 对象实现Comparable接口,并从写compareTo()方法,方法里是排序规则。
2. 利用Arrays.sort(o)进行排序,不要要注意需要List.toArray();
3. 获得排序后的List。

具体算法如下:
import java.util.Date;

/**
 * 需要排序的bean对象。
 * 
 * @author zaki
 * 
 */
public class ComparableBean implements Comparable<ComparableBean> {

	private int id;

	private String name;

	private Date birthday;

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	/*
	 * 按照id从大到到小的顺序排序。 自己可以在方法里面编写任意的排序算法。
	 */
	public int compareTo(ComparableBean o) {
		// 根据名字从小到大顺序:if(String.CASE_INSENSITIVE_ORDER.compare(getName(), o.getName()) > 0)
		// 根据生日从小到大顺序:if (this.birthday.compareTo(o.getBirthday()) > 0) 
		// 根据ID从小到大顺序。
		if(this.getId() > o.getId()){
			return 1;
		}else {
			return -1;
		}
	}

	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;
	}

	@Override
	public String toString() {
		return getId() + " : " + getName() + " : " + getBirthday().toString();
	}
}


排序和测试类:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Random;

public class TestComparable {

	private TestComparable() {
		ComparableBean cbean;
		Random rand = new Random();
		List<ComparableBean> beans = new ArrayList<ComparableBean>();
		for (int i = 0; i < 100; i++) {
			cbean = new ComparableBean();
			cbean.setId(rand.nextInt(10000));
			cbean.setBirthday(new Date());
			cbean.setName("TestName" + rand.nextInt(1000));
			beans.add(cbean);
		}
		
		Object[] beanObjects = beans.toArray();
		Arrays.sort(beanObjects);

		beans.removeAll(beans);
		System.out.println(beans.size());
		
		for (int i = 0; i < 100; i++) {
			System.out.println(beanObjects[i]);
		}

		System.out.println("ok");
	}

	public static void main(String[] args) {
		new TestComparable();
	}

}



运行结果如下:
0
181 : TestName290 : Tue Mar 29 15:51:54 CST 2011
230 : TestName45 : Tue Mar 29 15:51:54 CST 2011
275 : TestName601 : Tue Mar 29 15:51:54 CST 2011
354 : TestName689 : Tue Mar 29 15:51:54 CST 2011
657 : TestName755 : Tue Mar 29 15:51:54 CST 2011
792 : TestName471 : Tue Mar 29 15:51:54 CST 2011
1041 : TestName441 : Tue Mar 29 15:51:54 CST 2011
1061 : TestName821 : Tue Mar 29 15:51:54 CST 2011
1247 : TestName836 : Tue Mar 29 15:51:54 CST 2011
1347 : TestName139 : Tue Mar 29 15:51:54 CST 2011
1791 : TestName105 : Tue Mar 29 15:51:54 CST 2011
1882 : TestName930 : Tue Mar 29 15:51:54 CST 2011
1993 : TestName969 : Tue Mar 29 15:51:54 CST 2011
2114 : TestName912 : Tue Mar 29 15:51:54 CST 2011
2131 : TestName677 : Tue Mar 29 15:51:54 CST 2011
2168 : TestName975 : Tue Mar 29 15:51:54 CST 2011
2215 : TestName354 : Tue Mar 29 15:51:54 CST 2011
2253 : TestName84 : Tue Mar 29 15:51:54 CST 2011
2310 : TestName928 : Tue Mar 29 15:51:54 CST 2011
2385 : TestName466 : Tue Mar 29 15:51:54 CST 2011
2387 : TestName492 : Tue Mar 29 15:51:54 CST 2011
2388 : TestName416 : Tue Mar 29 15:51:54 CST 2011
2578 : TestName873 : Tue Mar 29 15:51:54 CST 2011
2603 : TestName8 : Tue Mar 29 15:51:54 CST 2011
2768 : TestName538 : Tue Mar 29 15:51:54 CST 2011
2790 : TestName503 : Tue Mar 29 15:51:54 CST 2011
2797 : TestName884 : Tue Mar 29 15:51:54 CST 2011
2893 : TestName747 : Tue Mar 29 15:51:54 CST 2011
2894 : TestName333 : Tue Mar 29 15:51:54 CST 2011
2961 : TestName33 : Tue Mar 29 15:51:54 CST 2011
3086 : TestName691 : Tue Mar 29 15:51:54 CST 2011
3156 : TestName70 : Tue Mar 29 15:51:54 CST 2011
3220 : TestName534 : Tue Mar 29 15:51:54 CST 2011
3274 : TestName220 : Tue Mar 29 15:51:54 CST 2011
3361 : TestName696 : Tue Mar 29 15:51:54 CST 2011
3578 : TestName709 : Tue Mar 29 15:51:54 CST 2011
3593 : TestName982 : Tue Mar 29 15:51:54 CST 2011
3751 : TestName619 : Tue Mar 29 15:51:54 CST 2011
3760 : TestName707 : Tue Mar 29 15:51:54 CST 2011
3989 : TestName241 : Tue Mar 29 15:51:54 CST 2011
4189 : TestName900 : Tue Mar 29 15:51:54 CST 2011
4321 : TestName442 : Tue Mar 29 15:51:54 CST 2011
4460 : TestName739 : Tue Mar 29 15:51:54 CST 2011
4566 : TestName251 : Tue Mar 29 15:51:54 CST 2011
4687 : TestName261 : Tue Mar 29 15:51:54 CST 2011
4809 : TestName138 : Tue Mar 29 15:51:54 CST 2011
4933 : TestName168 : Tue Mar 29 15:51:54 CST 2011
4939 : TestName298 : Tue Mar 29 15:51:54 CST 2011
4944 : TestName885 : Tue Mar 29 15:51:54 CST 2011
5000 : TestName299 : Tue Mar 29 15:51:54 CST 2011
5116 : TestName528 : Tue Mar 29 15:51:54 CST 2011
5261 : TestName239 : Tue Mar 29 15:51:54 CST 2011
5330 : TestName665 : Tue Mar 29 15:51:54 CST 2011
5530 : TestName719 : Tue Mar 29 15:51:54 CST 2011
5543 : TestName273 : Tue Mar 29 15:51:54 CST 2011
5599 : TestName389 : Tue Mar 29 15:51:54 CST 2011
5762 : TestName132 : Tue Mar 29 15:51:54 CST 2011
5798 : TestName156 : Tue Mar 29 15:51:54 CST 2011
5988 : TestName507 : Tue Mar 29 15:51:54 CST 2011
6049 : TestName569 : Tue Mar 29 15:51:54 CST 2011
6092 : TestName671 : Tue Mar 29 15:51:54 CST 2011
6135 : TestName403 : Tue Mar 29 15:51:54 CST 2011
6226 : TestName492 : Tue Mar 29 15:51:54 CST 2011
6251 : TestName397 : Tue Mar 29 15:51:54 CST 2011
6310 : TestName892 : Tue Mar 29 15:51:54 CST 2011
6434 : TestName254 : Tue Mar 29 15:51:54 CST 2011
6622 : TestName436 : Tue Mar 29 15:51:54 CST 2011
6631 : TestName609 : Tue Mar 29 15:51:54 CST 2011
6676 : TestName348 : Tue Mar 29 15:51:54 CST 2011
6856 : TestName309 : Tue Mar 29 15:51:54 CST 2011
6906 : TestName492 : Tue Mar 29 15:51:54 CST 2011
6944 : TestName812 : Tue Mar 29 15:51:54 CST 2011
6990 : TestName563 : Tue Mar 29 15:51:54 CST 2011
7235 : TestName67 : Tue Mar 29 15:51:54 CST 2011
7275 : TestName783 : Tue Mar 29 15:51:54 CST 2011
7625 : TestName457 : Tue Mar 29 15:51:54 CST 2011
7670 : TestName598 : Tue Mar 29 15:51:54 CST 2011
7687 : TestName813 : Tue Mar 29 15:51:54 CST 2011
7884 : TestName581 : Tue Mar 29 15:51:54 CST 2011
7945 : TestName350 : Tue Mar 29 15:51:54 CST 2011
8062 : TestName772 : Tue Mar 29 15:51:54 CST 2011
8090 : TestName971 : Tue Mar 29 15:51:54 CST 2011
8107 : TestName368 : Tue Mar 29 15:51:54 CST 2011
8283 : TestName516 : Tue Mar 29 15:51:54 CST 2011
8322 : TestName434 : Tue Mar 29 15:51:54 CST 2011
8332 : TestName960 : Tue Mar 29 15:51:54 CST 2011
8933 : TestName326 : Tue Mar 29 15:51:54 CST 2011
8952 : TestName818 : Tue Mar 29 15:51:54 CST 2011
9051 : TestName363 : Tue Mar 29 15:51:54 CST 2011
9062 : TestName551 : Tue Mar 29 15:51:54 CST 2011
9099 : TestName913 : Tue Mar 29 15:51:54 CST 2011
9204 : TestName266 : Tue Mar 29 15:51:54 CST 2011
9313 : TestName555 : Tue Mar 29 15:51:54 CST 2011
9526 : TestName234 : Tue Mar 29 15:51:54 CST 2011
9573 : TestName948 : Tue Mar 29 15:51:54 CST 2011
9575 : TestName284 : Tue Mar 29 15:51:54 CST 2011
9635 : TestName409 : Tue Mar 29 15:51:54 CST 2011
9762 : TestName963 : Tue Mar 29 15:51:54 CST 2011
9819 : TestName962 : Tue Mar 29 15:51:54 CST 2011
9995 : TestName116 : Tue Mar 29 15:51:54 CST 2011
ok
分享到:
评论
1 楼 areful 2013-03-06  

List list = new ArrayList();

//......
        
Collections.sort(list, new Comparator() {
         //这里的o1和o2就是list里任意的两个对象
           //然后按需求把这个方法填完整就行了
            public int compare(Object o1, Object o2)
          {
                //比较规则
            }
});

       

相关推荐

    Java集合容器面试题(2022最新版)-重点.docx

    ### Java集合容器面试题知识点详解 #### 集合容器概述 - **定义**:集合容器是一种用于存储数据的容器,其设计目的是为了提供一种统一且标准的方式来进行数据的存储和操作。 - **组成**:集合框架主要包括对外的...

    九歌在线java笔试题

    19. **Java容器**:Java主要容器有List(ArrayList、LinkedList等)、Set(HashSet、TreeSet等)和Map(HashMap、TreeMap等)。 20. **ArrayList与LinkedList底层实现**:ArrayList基于动态数组,访问速度快,插入...

    java面试宝典

    java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...

    java学习大纲java学习大纲.doc

    Collection接口包括了List和Set,List如ArrayList和LinkedList,按照添加顺序维护元素,Set如HashSet和TreeSet,不允许重复元素且有特定的排序规则。Map接口用于存储键值对,如HashMap和TreeMap,key在Map中必须是...

    Java服务器端开发面试.doc

    1. **`hashCode()`和`equals()`**:这两个方法在Java中用于对象的比较。`hashCode()`返回对象的哈希码,常用于哈希表(如HashMap)中快速定位对象。`equals()`检查两个对象是否相等。通常,如果重写了`equals()`,也...

    Java_api查看.rar

    - 集合框架是Java API中的重要部分,包括List、Set、Map等接口,以及ArrayList、HashSet、HashMap等实现类,为数据存储和操作提供了强大支持。 这些只是Java API的一部分知识点,实际的开发过程中,开发者会根据...

    《剑指Offer》题目及java代码实现

    Java集合框架是处理对象集合的重要工具,包括List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)和Map(如HashMap、TreeMap)。了解它们的特性和使用场景,可以优化数据存储和操作。书中可能会有针对集合...

    java复习题(选择填空及编程)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。它以其“一次编写,到处运行”的特性而闻名,因为Java代码可以被编译成字节码,然后在任何支持Java的平台上运行。Java...

    java面试题(尚学堂内部培训资源,绝对值得一看)

    反射机制允许在运行时动态获取类的信息并操作类的对象,包括字段、方法和构造器。 #### 20. 类的反射机制中的包及核心类? 主要涉及`java.lang.reflect`包下的`Class`、`Constructor`、`Method`、`Field`等类。 #...

    Java面试.doc

    **二、Java容器** Java中的容器包括集合类,如List、Set和Map,它们是处理对象的容器。List按顺序存储元素,允许重复,如ArrayList和LinkedList;Set不允许重复元素,如HashSet和TreeSet;Map存储键值对,如HashMap...

    java面试资料(全)

    5. **集合框架**:包括List、Set、Map接口及其实现,如ArrayList、LinkedList、HashSet、HashMap等。理解它们的区别、操作效率及应用场景。 6. **异常处理**:Java通过try-catch-finally语句处理异常,了解Checked...

    Java语音学习,基础教程

    List是有序且允许重复元素的集合,如ArrayList和LinkedList。Set不允许重复元素,如HashSet和TreeSet。Collections是集合操作的工具类,提供排序、查找、修改等方法。Map接口存储键值对,HashMap是最常用的实现,它...

    Java南开上机题(全)

    3. **数据结构与算法**:数组、链表、栈、队列、集合(List、Set、Map接口及其常见实现类)、树结构(二叉树、平衡树如AVL、红黑树)等,以及常见的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆...

    有关Java经典问答

    - **Class类**:Java的Class类代表运行时的类信息,可以通过反射动态地创建对象、调用方法、获取和修改字段值。 8. **JDBC(Java数据库连接)**: - **连接数据库**:Java使用DriverManager类加载数据库驱动,...

    学习笔记 java\CoreJava笔记\CoreJava_day15

    - 集合框架是Java中处理对象数组的一种方式,包括List、Set和Queue接口,以及ArrayList、LinkedList、HashSet、TreeSet、LinkedList等实现类。 - `ArrayList`提供了动态数组的功能,允许在任何位置插入和删除元素...

    Java API文档

    Java反射API允许在运行时动态获取类的信息并操作对象,如`Class`类用于获取类信息,`Method`和`Field`分别代表类的方法和字段,`Constructor`表示构造函数。 8. **泛型** 泛型提供类型安全的容器,避免了强制类型...

    Java面试题以及答案

    集合是用来存储和操作一组对象的容器。提供了对数据的灵活管理,支持增删改查等操作。 #### 49. 集合的通用方法有那些?通用方法是什么?(操作) - 通用方法包括:`add()`、`remove()`、`contains()`、`size()`、`...

    java基础教程

    它们提供了存储和管理对象的容器,支持动态扩容、排序、遍历等功能。 六、输入/输出流 Java的I/O流用于处理数据的输入和输出,分为字节流和字符流,包括文件流、网络流等。BufferedReader和BufferedWriter等类用于...

    Java经典编程题汇总

    4. **集合框架**:List、Set、Map接口的实现类,如ArrayList、LinkedList、HashSet、HashMap等,以及它们的特性和使用场景。理解集合的遍历、查找、排序等操作。 5. **泛型**:它的作用、限制和好处,如何创建泛型...

    c,c++,java笔试题大全

    - **STL(Standard Template Library)**:容器(如vector、list、set)、算法(如排序、查找)和迭代器的使用。 - **异常处理**:try-catch语句的使用。 - **命名空间**:避免命名冲突。 3. **Java**:Java是一...

Global site tag (gtag.js) - Google Analytics