java线性表的排序
前言:刚才在弄jdbc的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈哈,竟然真有这么一个静态方法public static <t> void sort(list<t> list, comparator<? super t> 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()方法编写比较规则:
立即学习“Java免费学习笔记(深入)”;
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线性表的排序 的内容,更多相关内容请关注PHP中文网(www.php.cn)!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号