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

总结

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

(0)

相关推荐

  • java中List对象列表实现去重或取出及排序的方法

    前言 因为在面试的时候碰到几次list的去重和排序,觉着有必要给大家总结一下具体的方法,分享出来供大家学习参考,话不多说了,来一起看看下面介绍的一种做法: 一.list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是属性相同,因此需要重写equals和hashcode方法,不知道有几个可以手写出来. student的equals方法: public void equals(Object o){ if(this == o)

  • java中List对象排序通用方法

    本文实例讲述了java中List对象排序通用方法.分享给大家供大家参考.具体分析如下: 在数据库中查出来的列表list中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询.如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能. 只要把第一次查出来的结果存放在session中,就可以对list重新排序了.一般对list排序可以使用Collections.sort(list),但如果list中包含是一个对象的话,这种方法还是行不通的.那要怎么排序

  • java从list中取出对象并获得其属性值的方法

    最近公司的项目需要导出csv文件,一个同事用最原始的方式将每条记录取出然后加","解决.但是客户后面要求在每个页面当中都加入这个功能.于是,问题来了,分开写代码太多,合起来又不能确定在list中存储的对象为哪个对象,不能用get方法获得属性.我一直认为当初他那样写就将程序写死了.可是,在多次尝试后,还是通过java的反射从list中取出了对象,从对象中取出了属性值: 下面是代码: 复制代码 代码如下: package com.hb.test; import java.lang.refl

  • java实现List中对象排序的方法

    本文实例讲述了java实现List中对象排序的方法.分享给大家供大家参考,具体如下: package com.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class NewsManager { /** * @param args */ public static void main(String[

  • Java中对list元素进行排序的方法详解

    在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList.这些集合提供了对对象组的索引访问.他们提供了元素的添加与删除支持.然而,它们并没有内置的元素排序支持. 你能够使用java.util.Collections类中的sort()方法对List元素进行排序.你既可以给方法传递一个List对象,也可以传递一个List和一个Comparator.如果列表中的元素全都是相同类型的类,并且这个类实现了Comparable接口,你可

  • java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】

    本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示Java正则表达式提取需要的字符并放入数组,即ArrayList数组去重复功能. 具体代码如下: package com.test.tool; import java.util.ArrayList; import java.util.HashSet; import java.util.regex.*; public class MatchTest { public static void ma

  • java list去重操作实现方式

    Java中的List是可以包含重复元素的(hash code 和equals),那么对List进行去重操作有两种方式实现: 方案一:可以通过HashSet来实现,代码如下: 复制代码 代码如下: class Student { private String id; private String name; public Student(String id, String name) { super(); this.id = id; this.name = name; } @Override pu

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

    前言 Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序. 学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序. 第一种:实体类自己实现比较 (实现comparable接口:public interface Comparable<T> ,里面就一个方法声明:public int compareTo(T o); ) 示例代码: publ

  • Java针对ArrayList自定义排序的2种实现方法

    本文实例讲述了Java针对ArrayList自定义排序的2种实现方法.分享给大家供大家参考,具体如下: Java中实现对list的自定义排序主要通过两种方式 1)让需要进行排序的对象的类实现Comparable接口,重写compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用Collections.sort()来排序对象数组 public class Student implements Comparable{ private int id; private int age; p

  • Java Clone深拷贝与浅拷贝的两种实现方法

    1.首先,你要知道怎么实现克隆:实现Cloneable接口,在bean里面重写clone()方法,权限为public. 2.其次,你要大概知道什么是地址传递,什么是值传递. 3.最后,你要知道你为什么使用这个clone方法. 先看第一条,简单的克隆代码的实现.这个也就是我们在没了解清楚这个Java的clone的时候,会出现的问题. 看完代码,我再说明这个时候的问题. 先看我要克隆的学生bean的代码: package com.lxk.model; /** * 学生类:有2个属性:1,基本属性-S

  • Java sort集合排序的两种方式解析

    这篇文章主要介绍了Java sort集合排序的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Comparable和Comparator public static <T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序 (我们在自己的类里面实现Comparabl接口方法compareTo) public static <T> void sort(List<T&g

  • Java实现对象按照其属性排序的两种方法示例

    本文实例讲述了Java实现对象按照其属性排序的两种方法.分享给大家供大家参考,具体如下: 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序的对象类实现Comparable<>接口. 首先,创建学生类,我们将根据学生成绩对学生进行排序: /** * 学生类 */ class Student implements Comparable<Student>{ String name; int age; int score; public Student(Stri

  • 浅谈Java中Collections.sort对List排序的两种方法

    目录 一.Collections.sort的简单使用 二.问题提出 三.Comparable实现排序 四.Comparator实现排序 五.Comparable 与Comparator区别 一.Collections.sort的简单使用 说到List的排序,第一反应当然是使用Collections.sort,方便简单.下面实现一下~~ private void sortStrings() { List<String> list = new ArrayList<String>();

  • Java编程求二叉树的镜像两种方法介绍

    给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像. 仔细分析这两棵树的特点,看看能不能总结出求镜像的步骤.这两棵树的根节点相同,但他们的左右两个子节点交换了位置.因此我们不妨先在树中交换根节点的两个子节点,就得到了下面一幅图中的第二颗树 解法1(递归) 思路1:如果当前节点为空,返回,否则交换该节点的左右节点,递归的对其左右节点进行交换处理. /*class TreeNode{ int val; TreeNode left=null; TreeNode right=null;

  • Java中List排序的三种实现方法实例

    目录 前言 1.使用 Comparable 排序 2.使用 Comparator 排序 2.1 新建 Comparator 比较器 2.2 匿名类比较器 3.使用 Stream 流排序 总结 前言 在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作.比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进行排序,这个时候,我们就需要对 List 集合进行自定义排序操作了. ​List 排序的常见方法有以下

  • 详解Java递归实现树形结构的两种方式

    目录 0.引言 1.数据准备 2.类型转化 3.递归实现方法 3.1.Java7及以下纯Java递归实现 3.2.Java8及以上借助lamda表达式实现 0.引言 在开发的过程中,很多业务场景需要一个树形结构的结果集进行前端展示,也可以理解为是一个无限父子结构,常见的有报表指标结构.菜单结构等.Java中递归实现树形结构的两种常见方式如下: Java7及以下纯Java递归实现 Java8及以上借助lamda表达式实现 1.数据准备 Java实体类NodePO对应数据库表 package com

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

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

随机推荐