您的位置:首页 > 编程语言 > Java开发

关于java中的List集合的排序问题/Collections.sort()的使用(转)

2015-04-12 10:08 711 查看
排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。]如将下列数字进行排序

1,3,5,8,3,6

于是我们得出结果

1,3,3,5,6,8

将下列字母(字符)进行排序

a,i,e,f,w,s

于是我们得出结果

a,e,f,i,s,w

但是我们实际遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。

再举个简单例子。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。

如果对java比较熟悉的会知道java.util.Comparator 接口。要实现里面的函数int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。

[java]
view plaincopy

// 待比较的用户类
public class User {
//首先年龄排序,如果年龄相同,则按名字排序
String name;
String age;

public User(String name, String age) {
this.name = name;
this.age = age;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public String getName() {
return name;
}

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

[java]
view plaincopy

//具体的比较类,实现Comparator接口
import java.util.Comparator;

public class ComparatorUser implements Comparator {

public int compare(Object arg0, Object arg1) {
User user0 = (User) arg0;
User user1 = (User) arg1;

// 首先比较年龄,如果年龄相同,则比较名字
int flag = user0.getAge().compareTo(user1.getAge());
if (flag == 0) {
return user0.getName().compareTo(user1.getName());
} else {
return flag;
}
}
}

[java]
view plaincopy

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

//测试类
public class SortTest {

public static void main(String[] args) {
List<User> userlist = new ArrayList<User>();
userlist.add(new User("dd", "4"));
userlist.add(new User("aa", "1"));
userlist.add(new User("ee", "5"));
userlist.add(new User("bb", "2"));
userlist.add(new User("ff", "5"));
userlist.add(new User("cc", "3"));
userlist.add(new User("gg", "6"));

ComparatorUser comparator = new ComparatorUser();
Collections.sort(userlist, comparator);

for (int i = 0; i < userlist.size(); i++) {
User user_temp = (User) userlist.get(i);
System.out.println(user_temp.getAge() + "," + user_temp.getName());
}
}
}

输出结果: 1, aa

2, bb

3, cc

4, dd

5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序

5, ff

6, gg
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: