Java对List进行排序的两种实现方法
作者:shangmingchao 发布时间:2022-10-31 13:40:06
标签:java,list,排序
前言
Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序。
学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序。
第一种:实体类自己实现比较
(实现comparable接口:public interface Comparable<T>
,里面就一个方法声明:public int compareTo(T o);
)
示例代码:
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
int flag = this.name.compareTo(o.name);
if(flag == 0) {
flag = this.age - o.age;
}
return flag;
}
}
然后利用List类的sort(Comparator<? super E> c)
方法或java.util.Collections
工具类的sort(List<T> list)
(其实里面就一句:list.sort(null);
)进行排序:
List<Student> students = new ArrayList<Student>();
students.add(new Student("a",10));
students.add(new Student("b",12));
students.add(new Student("b",11));
students.add(new Student("ac",20));
students.sort(null);
//Collections.sort(students);
结果:
a 10
ac 20
b 11
b 12
第二种:借助比较器进行排序。
示例代码:
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
比较器java.util.Comparator
类是一个接口(public interface Comparator<T>
),包含int compare(T o1, T o2);
等方法:
我们的比较器要实现该接口并实现compare
方法:
private class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
int flag = o1.getName().compareTo(o2.getName());
if(flag == 0) {
flag = o1.getAge() - o2.getAge();
}
return flag;
}
}
比较的时候可以利用List的sort(Comparator<? super E> c)
方法(或者java.util.Collections
工具类的sort(List<T> list, Comparator<? super T> c)
方法)进行排序。
List<Student> students = new ArrayList<Student>();
students.add(new Student("a",10));
students.add(new Student("b",12));
students.add(new Student("b",11));
students.add(new Student("ac",20));
Test t = new Test();
students.sort(t.new StudentComparator());
//Collections.sort(students, t.new StudentComparator());
for(Student student : students) {
System.out.println(student.getName()+" "+student.getAge());
}
结果跟第一种方法一样:
a 10
ac 20
b 11
b 12
来源:http://blog.csdn.net/shangmingchao/article/details/47145569


猜你喜欢
- 本文实例为大家分享了java实现五子棋游戏的具体代码,供大家参考,具体内容如下此游戏具有双人对战功能和人机对战功能一、游戏界面的实现一个游戏
- 1 Android SDK自带的org.json解析解析原理: 基于文档驱动,需要把全部文件读入到内存中,然后遍历所有数据,根据需要检索想要
- 注解实现自动装配@Autowire注解@Autowire注解,自动装配通过类型,名字如果Autowire不能唯一自动装配上属性,则需要通过@
- 井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数
- 一、前言点关注不迷路,持续输出Unity干货文章。嗨,大家好,我是新发。之前我写了一篇Unity流体模拟的文章:《Unity流体模拟,支持粒
- 主从表关联查询,返回对象带有集合属性昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性。我先将出现的问题记录
- MainActivity如下:package cc.ab;import android.os.Bundle;import android.p
- 1.介绍关机闹钟为Android中默认支持的功能,实现起来则需要满足一定的条件:自动开机、开机后响铃。对于自动开机来说,自动关机可以在应用层
- 工厂模式和简单工厂有什么区别。废话不多说,对比第一篇例子应该很清楚能看出来。优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了
- 本文实例展示了C#基于TimeSpan实现倒计时效果的方法,比较实用的功能,对于初学者来说有一定的学习参考价值。具体实现方法如下:示例代码如
- Java数组初始化需要指定数组容量,但是在许多情况下需要动态扩充容量。有两种方法可以实现:1.采用ArrayList类数组,它可以在需要时自
- 配置如下: <!--邀请用户送优惠券规则{邀请人规则:[{邀请人:优惠券ID}],使用邀请码人:优惠券ID},按照邀请人数从小到大配置
- 一、DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了。还有两种,一种是改变struts.xml配置文件中act
- 前言在 Java 中通常对一些方法进行一些注解操作,但是很多注解在 Java 代码上没有问题,如果切换到 Kotlin 上时,如果继续使用这
- C/C++ 左移<<, 右移>>作用1. 左移 <<取两个数字,左移第一个操作数的位,第二个操作数决定要
- 老规矩,先上图看效果。说明TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢
- Android动画之小球拟合动画实例实现效果:动画组成:1.通过三阶贝塞尔曲线来拟合圆,拟合系数的由来,以及怎么选控制点.2.利用画布can
- 一、strcmp函数适用对象char*类型字符串函数介绍strcmp函数是cstring库中的函数,包含在string.h头文件中用法str
- 使用OptionMenu只要重写两个方法public boolean onCreateOptionsMenu(Menu menu):菜单的初
- 前言延迟初始化 是一种将对象的创建延迟到第一次需要用时的技术,换句话说,对象的初始化是发生在真正需要的时候才执行,值得注意的是,术语&nbs