java线性表的排序
前言:刚才在弄jdbc的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈哈,竟然真有这么一个静态方法public static 8742468051c85b06f0a0af9e3e506b5c void sort(list8742468051c85b06f0a0af9e3e506b5c list, comparator117c5a0bdb71ea9a9d0c2b99b03abe3e c)。
修改记录:根据@mythabc的的建议,添加了另一种方式。
方式一:comparator比较器
好处:这种方式运行的时候比较灵活,如果要更换排序规则,不更改原有的比较器,而直接新建另一个比较器,在客户端换一下比较器的新类名就行了,这样比较贴近开闭原则,当累积了多个比较器后,各种排序规则可以随意转换,挺爽的;模型与排序分离,比较贴近单一职责原则。
1.先定义一个模型:
package model;
/**
* user.java
*
* @author 梁wp 2014年3月3日
*/
public class user
{
private string username;
private int userage;
public user()
{
}
public user(string username, int userage)
{
this.username = username;
this.userage = userage;
}
public string getusername()
{
return username;
}
public void setusername(string username)
{
this.username = username;
}
public int getuserage()
{
return userage;
}
public void setuserage(int userage)
{
this.userage = userage;
}
}
2.然后定义一个比较器,实现java.util.comparator接口,在compare()方法编写比较规则:
package util;
import java.util.comparator;
import model.user;
/**
* comparatoruser.java
*
* @author 梁wp 2014年3月3日
*/
public class comparatoruser implements comparator<user>
{
@override
public int compare(user arg0, user arg1)
{
// 先比较名字
int flag = arg0.getusername().compareto(arg1.getusername());
// 如果名字一样,就比较年龄
if (flag == 0)
{
return arg0.getuserage() - arg1.getuserage();
}
return flag;
}
}
3.排序的时候用java.util.collections里面的sort(list list, comparator c)方法:
package test;
import java.util.arraylist;
import java.util.collections;
import java.util.list;
import util.comparatoruser;
import model.user;
/**
* testapp.java
*
* @author 梁wp 2014年3月3日
*/
public class testapp
{
public static void main(string[] arg0)
{
list<user> userlist = new arraylist<user>();
// 插入数据
userlist.add(new user("a", 15));
userlist.add(new user("b", 14));
userlist.add(new user("a", 14));
// 排序
collections.sort(userlist, new comparatoruser());
// 打印结果
for (user u : userlist)
{
system.out.println(u.getusername() + " " + u.getuserage());
}
}
}
4.运行结果:
a 14
a 15
b 14
方式二:实现comparable接口
好处:直接让模型附带可排序的属性,不用去定义新的类(不用定义比较器),减少了类的数量,方便管理,阅读的时候比较轻松。
1.先定义一个模型,并实现comparable接口,在compareto()方法编写比较规则:
package model;
/**
* student.java
*
* @author 梁wp 2014年3月4日
*/
public class student implements comparable<student>
{
private string studentname;
private int studentage;
public student()
{
}
public student(string studentname, int studentage)
{
this.studentname = studentname;
this.studentage = studentage;
}
public string getstudentname()
{
return studentname;
}
public void setstudentname(string studentname)
{
this.studentname = studentname;
}
public int getstudentage()
{
return studentage;
}
public void setstudentage(int studentage)
{
this.studentage = studentage;
}
@override
public int compareto(student o)
{
// 先比较名字
int flag = this.getstudentname().compareto(o.getstudentname());
// 如果名字一样,就比较年龄
if (flag == 0)
{
return this.getstudentage() - o.getstudentage();
}
return flag;
}
}
2.排序的时候用java.util.collections里面的sort(list list)方法:
package test;
import java.util.arraylist;
import java.util.collections;
import java.util.list;
import model.student;
/**
* testapp.java
*
* @author 梁wp 2014年3月4日
*/
public class testapp2
{
public static void main(string[] arg0)
{
list<student> studentlist = new arraylist<student>();
// 插入数据
studentlist.add(new student("a", 15));
studentlist.add(new student("b", 14));
studentlist.add(new student("a", 14));
// 排序
collections.sort(studentlist);
// 打印结果
for (student s : studentlist)
{
system.out.println(s.getstudentname() + " " + s.getstudentage());
}
}
}
3.运行结果:
a 14
a 15
b 14
以上就是java线性表的排序 的内容。