`
skyqqzhou
  • 浏览: 34231 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用collection.sort()方法对list集合排序

J# 
阅读更多

第一种是list中的对象实现Comparable接口,如下:
/**
* 根据order对User排序
*/
public class User implements Comparable<User>{
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public int compareTo(User arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}
}
测试一下:
public class Test{

public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
//此处add user2再add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
输出结果如下
a
b
第二种方法是根据Collections.sort重载方法来实现,例如:
/**
* 根据order对User排序
*/
public class User { //此处无需实现Comparable接口
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
主类中这样写即可:
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
list.add(user2);
list.add(user1);

Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
}
输出结果如下
a
b
前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:
Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
// 第一次比较专业
int i = arg0.getOrder().compareTo(arg1.getOrder());

// 如果专业相同则进行第二次比较
if(i==0){
// 第二次比较
int j=arg0.getXXX().compareTo(arg1.getXXX());
// 如果学制相同则返回按年龄排序
if(j==0){
return arg0.getCCC().compareTo(arg1.getCCC());
}
return j;
}
return i;
}
});


以下是另外一个例子
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Exmployee> arrayList = new ArrayList<Exmployee>() ;
arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ;
arrayList.add(new Exmployee("zengmin",new Integer(4000))) ;
arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ;
arrayList.add(new Exmployee("giuming",new Integer(2200))) ;
Collections.sort(arrayList, new Comparator<Exmployee>(){
public int compare(Exmployee arg0, Exmployee arg1) {
return arg1.getSalary()-arg0.getSalary() ; //按照工资升序
//return arg0.getSalary()-arg1.getSalary() ; 按照工资降序
//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序
}
});
for(Exmployee e:arrayList)
System.out.println(e.getName()+"'s salary is "+e.getSalary()) ;
}

}

class Exmployee {
public Exmployee(String name, int salary) {
this.name = name ;
this.salary = salary ;
}

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

private int salary;
}

分享到:
评论

相关推荐

    11集合.rarjava 集合类

    java 集合类的排序主要是用Collections.sort方法,Collections和Collection是不一样的,前者是类,后者是接口,在这里,我主要是想说明它的sort方法的几种类型, 提示:实现接口的方法时,只需要比较两个数,大的返回1,...

    Java.util.Collection类的学习.pdf

    * 排序(Sort):使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。 * 混排(Shuffling):使用shuffle方法可以打乱在一个List中的任何排列的踪迹。 * 反转(Reverse):使用reverse方法可以根据元素的...

    Freemarker中遍历list集合实例

    Freemarker 中遍历 List 集合实例是指在 Freemarker 应用中遍历 List 集合获取需要的数据,并对需要的数据进行排序加工后呈现给用户。以下是 Freemarker 中遍历 List 集合实例的详细介绍: 一、 Freemarker 中 list...

    Go语言使用sort包对任意类型元素的集合进行排序的方法

    本文实例讲述了Go语言使用sort包对任意类型元素的集合进行排序的方法。分享给大家供大家参考。具体如下: 使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法: 代码如下:// Len is ...

    java中的排序.ppt

    实现 Comparable 接口的对象可以使用 Collections.sort() 方法对其进行排序。Comparable 接口中定义了 compareTo() 方法,用于提供对其实现类的对象进行整体排序所需要的比较逻辑。例如: ```java class Programmer...

    java集合类面试题总结

    Collection 是 Java 中的一个接口,定义了集合操作的基本方法,而 Collections 是一个工具类,提供了许多静态方法来操作集合。 Java 中的 Collection Framework Java 中的 Collection Framework 包括了多种集合类...

    java社招二面面试题有哪些

    二面问题汇总 对象之间的关系 方法重载和重写的区别 线程池有哪些参数 Union和Unionall的区别 ...List的Conllections.sort()底层怎么实现的 Comapeble和compartor jsp和servlet的区别 jsp要编译吗 jsp编译了放在哪

    java8源码-javaSE:JavaSE是在日常工作中整理的功能demo(如Java操作Excel表格、冒泡算法等)总结这些JavaSE常用

    总结这些JavaSE常用demo,记录工作中常用的方法并方便日后复用。 功能简介 Introduction 1.adapter 设计模式-适配器 2.algorithm 常用算法 2.1 sort 排序算法 2.1.1 冒泡排序 2.2 maxCommonDivisor 求两数最大公约数...

    Java 面试资源(基础 多线程)

    Collections.sort排序内部原理 HashMap 的实现原理 HashSet 的实现原理 ArrayList 和 LinkedList 的区别 为何Map接口不继承Collection接口 HashMap的底层实现原理 HashMap并发安全的问题 JDK1.8与JDK1.7的性能对比

    freemarker总结

    除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由&lt;#list...&gt;指令使用的受限sequences。 5、 方法:通过传递的参数进行计算,以新对象返回结果 方法变量通常是基于给出的参数计算值在数据...

Global site tag (gtag.js) - Google Analytics