Java对List进行排序的两种实现方法_java

前言

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

总结

以上就是关于Java中对List进行排序的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, list
, 排序
, java对list进行排序
java中list排序
java list 排序、java list 对象 排序、java list sort 排序、java list map 排序、java list集合排序,以便于您获取更多的相关知识。

时间: 2024-09-19 23:55:11

Java对List进行排序的两种实现方法_java的相关文章

Hibernate分页的两种实现方法_java

本文实例讲述了Hibernate分页的两种实现方法.分享给大家供大家参考,具体如下: 1. criteria分页 public Page getPage(int currentPage,int pageSize,Criterion...crts){ Criteria c=session.createCriteria(House.class); List list=null; for (int i = 0; i < crts.length; i++) { c.add(crts[i]); } c.s

Java之递归求和的两种简单方法(推荐)_java

方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ public void sum(int num) { this.sum += num--; if(0 < num){ sum(num); } else { System.out.println("sum = " + sum); } } } 方法二: package com.smbea

如何理解java的这种方法,有两种get方法连在一起

问题描述 如何理解java的这种方法,有两种get方法连在一起 对象.get( ).getId( )==id 如何理解这条程序语句 如何理解java的这种方法,有两种get方法连在一起 解决方案 这种基本是list集合用的,,比如List中放一个User对象,,通过list.get(0).getId();这个指的就是取出list集合中的第一个对象的Id属性 解决方案二: 第一个get返回一个对象,它包含第二个方法,比如 class A { public int getid() { return

算法-选择排序这两种有什么不同,注意粗体部分

问题描述 选择排序这两种有什么不同,注意粗体部分 public static void sort(Comparable[] a){ // 将a[] 按升序排列 int N = a. length; // 数组长度 for (i nt i = 0; i < N; i ++) { // 将a[i ] 和a[i +1. . N] 中最小的元素交换 int min = i ; // 最小元素的索引 for (int j = i +1; j < N; j ++) if (l ess(a[j ] a[mi

Javascript和Java语言有什么关系?两种语言间的异同比较_java

虽然Javascript与Java有紧密的联系,但却是两个公司开发的不同的两个产品.Java是Sun公司推出的新一代面向对象的程序设计语言.特别适合于Internet应用程序开发:而Javascript是Sun与Netscape公司联合推出的产品,是为了扩展Netscape Navigator功能而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言.且它的前身是Live Script,而Java的前身是Oak语言.下面就对两种语言间的异同作如下比较: (1)基于对象和面向对象 Jav

用java实现云计算的两种趋势性方法

本文讲的是用java实现云计算的两种趋势性方法,[IT168 资讯]最近,人们在思考如何使用Java来实现云计算,我看到了两种趋势性的方法.它们存在交叉重叠处而并非互相排斥,但总体而言它们在项目方面有着非常不同的表现: 重面向UI(Heavy UI oriented) 这种类型的应用或框架通常提供基于UI的控制台.管理应用.插件等,这为管理云中的资源比如开始和停止图像等提供了唯一的方法.这种方法的关键特征是它需要大量用户的输入和人的干预,所以这变得相对不动态.不随需而变.最好的例子是:Right

Android时分秒计时器的两种实现方法_Android

可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了. <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:format="%s" android:id

c++-关于bfs,dfs的两种实现方法的区别

问题描述 关于bfs,dfs的两种实现方法的区别 这两个算法可以用递归实现,也可以用open表close表实现,这两种实现方法有什么区别呢?或者说哪个更好更便于实现呢? 解决方案 基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS创建线程的两种方法,及之间的区别java中实现多线程的两种方法的区别 解决方案二: http://blog.csdn.net/lxpaopao/article/details/44806381

Android时分秒计时器的两种实现方法

可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了. <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:format="%s" android:id