iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java集合进行排序的方式总结
  • 291
分享到

java集合进行排序的方式总结

2024-04-02 19:04:59 291人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

ava集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(

ava集合工具类Collections中提供了两种排序的方法,分别是:

  1. Collections.sort(List list)
  2. Collections.sort(List list,Comparator c)

第一种称为自然排序,参与排序的对象需实现comparable接口,重写其compareTo()方法,方法体中实现对象的比较大小规则,示例如下:

实体类:(基本属性,getter/setter方法,有参无参构造方法,toString方法)


package test;

public class Emp implements Comparable {

    private String name;
    private int 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;
    }
    public Emp() {
        super();
    }
    public Emp(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Emp [name=" + name + ", age=" + age + "]";
    }
    @Override
    public int compareTo(Object o) {
        if(o instanceof Emp){
            Emp emp = (Emp) o;
//          return this.age-emp.getAge();//按照年龄升序排序
            return this.name.compareTo(emp.getName());//换姓名升序排序
        }
        throw new ClassCastException("不能转换为Emp类型的对象...");
    }

}

第二种叫定制排序,或自定义排序,需编写匿名内部类,先new一个Comparator接口的比较器对象c,同时实现compare()其方法;
然后将比较器对象c传给Collections.sort()方法的参数列表中,实现排序功能;

说明:第一种方法不够灵活,实体类实现了comparable接口后,会增加耦合,如果在项目中不同的位置需要根据不同的属性调用排序方法时,需要反复修改比较规则(按name还是按age),二者只能选择其一,会起冲突.第二种就很好地解决了这个问题.在需要的地方,创建个内部类的实例,重写其比较方法即可.

jUnit4单元测试类代码如下:


package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

public class TestSort {

    static List list = new ArrayList();
    //@BeforeClass注解标注的方法会在其它测试方法执行之前先执行,
    //且只执行一次.@Before注解标注的方法会在每个测试方法之前执行;
    //此处初始化集合只需要一次,因此使用@BeforeClass.
    @BeforeClass
    public static void init(){
        list.add(new Emp("tom",18));
        list.add(new Emp("jack",20));
        list.add(new Emp("rose",15));
        list.add(new Emp("jerry",17));
        System.out.println("排序前:");
        for(Object o : list){
            System.out.println(o);
        }
    }

    
//  @Test
//  public void testSortAge(){
//      Collections.sort(list);
//      System.out.println("自然排序按age排序后:");
//      for(Object o : list){
//          System.out.println(o);
//      }
//  }
//
    
    @Test
    public void testSortName(){
        Collections.sort(list);
        System.out.println("自然排序按name升序排序后:");
        for(Object o : list){
            System.out.println(o);
        }
    }

    
    @Test
    public void testComparatorSortAge(){
        Collections.sort(list,new Comparator () {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Emp && o2 instanceof Emp){
                    Emp e1 = (Emp) o1;
                    Emp e2 = (Emp) o2;
                    return e1.getAge() - e2.getAge();
                }
                throw new ClassCastException("不能转换为Emp类型");
            }
        });
        System.out.println("使用Comparator比较器按age升序排序后:");
        for(Object o : list){
            System.out.println(o);
        }
    }
    
    @Test
    public void testComparatorSortName(){
        Collections.sort(list,new Comparator () {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Emp && o2 instanceof Emp){
                    Emp e1 = (Emp) o1;
                    Emp e2 = (Emp) o2;
                    return e1.getName().compareTo(e2.getName());
                }
                throw new ClassCastException("不能转换为Emp类型");
            }
        });
        System.out.println("使用Comparator比较器按name升序排序后:");
        for(Object o : list){
            System.out.println(o);
        }
    }

}

右键空白位置 —> Run As —> JUnit Test —>

运行结果如下:

排序前:
Emp [name=tom, age=18]
Emp [name=jack, age=20]
Emp [name=rose, age=15]
Emp [name=jerry, age=17]
自然排序按name升序排序后:
Emp [name=jack, age=20]
Emp [name=jerry, age=17]
Emp [name=rose, age=15]
Emp [name=tom, age=18]
使用Comparator比较器按age升序排序后:
Emp [name=rose, age=15]
Emp [name=jerry, age=17]
Emp [name=tom, age=18]
Emp [name=jack, age=20]
使用Comparator比较器按name升序排序后:
Emp [name=jack, age=20]
Emp [name=jerry, age=17]
Emp [name=rose, age=15]
Emp [name=tom, age=18]

内容扩展:

使用重载的Collections.sort(List,Comparator)方法

方法一:自定义一个比较器然后传入

Collections.sort(List,Comparator)中。


测试代码:

自定义的比较器:
import java.util.Comparator;

public class MyComparator implements Comparator<Cell>{
	@Override
	public int compare(Cell o1, Cell o2) {
		return o1.getY()-o2.getY();//根据传入的cell的y坐标由小到大进行排序
	}
}
测试类:
 @Test
    public void testComparator() {
    	List<Cell> cells = new ArrayList<>();
    	cells.add(new Cell(2,3));
    	cells.add(new Cell(5,1));
    	cells.add(new Cell(3,2));
    	System.out.println(cells);//[Cell [x=2, y=3], Cell [x=5, y=1], Cell [x=3, y=2]]
    	MyComparator com = new MyComparator();
    	Collections.sort(cells,com);
    	System.out.println(cells);//根据自定义排序后的结果:[Cell [x=5, y=1], Cell [x=3, y=2], Cell [x=2, y=3]]
    } 

方法二:采用匿名内部的形式(推荐做法)


 @Test
    public void testComparator() {
    	List<Cell> cells = new ArrayList<>();
    	cells.add(new Cell(2,3));
    	cells.add(new Cell(5,1));
    	cells.add(new Cell(3,2));
    	System.out.println(cells);//[Cell [x=2, y=3], Cell [x=5, y=1], Cell [x=3, y=2]]
    	Collections.sort(cells,new Comparator<Cell>(){//此处创建了一个匿名内部类
		@Override
		public int compare(Cell o1,Cell o2){
			return o1.getY() - o2.getY();
		}

	});
    	System.out.println(cells);//[Cell [x=5, y=1], Cell [x=3, y=2], Cell [x=2, y=3]]
    } 

到此这篇关于java集合进行排序的方式总结的文章就介绍到这了,更多相关java集合进行排序的两种方式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java集合进行排序的方式总结

本文链接: https://www.lsjlt.com/news/132366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java集合进行排序的方式总结
    ava集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(...
    99+
    2024-04-02
  • Java 中如何对集合进行排序
    Java 中如何对集合进行排序 在 Java 中,集合是一种非常常见的数据结构,它可以用来存储一组元素,而且可以动态地增加或删除元素。在实际的开发中,我们经常需要对集合中的元素进行排序,以便更方便地查...
    99+
    2023-09-25
    java 开发语言
  • C#对集合进行排序
    先来看看下面List<T>泛型集合的排序例子: using System; using System.Collections.Generic; using System....
    99+
    2024-04-02
  • 怎么在java中对集合进行排序
    这篇文章将为大家详细讲解有关怎么在java中对集合进行排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于...
    99+
    2023-06-14
  • java中怎么使用Collections.reverse对list集合进行降序排序
    这篇文章主要讲解了“java中怎么使用Collections.reverse对list集合进行降序排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中怎么使用Collections....
    99+
    2023-06-21
  • C#中对集合排序的三种方式
    对集合排序,可能最先想到的是使用OrderBy方法。 class Program { static void Main(string[] args) ...
    99+
    2024-04-02
  • java集合遍历的几种方式总结及详细比较
    集合类的通用遍历方式, 用迭代器迭代:Iterator it = list.iterator();while(it.hasNext()) {  Object obj = it.next();}...
    99+
    2023-05-31
    java 集合 遍历
  • 如何使用Collections.reverse对list集合进行降序排序
    目录使用Collections.reverse对list集合进行降序排序Collections.reverse原理使用Collections.reverse对list集合进行降序排序...
    99+
    2024-04-02
  • Java使用Collections.sort对中文进行排序方式
    目录使用Collections.sort对中文进行排序Collections.sort 排序 注解使用Collections.sort对中文进行排序 使用collections.so...
    99+
    2024-04-02
  • Java集合和数据结构排序实例详解
    目录概念插入排序直接插入排序代码实现性能分析希尔排序代码实现性能分析选择排序直接选择排序代码实现性能分析堆排序代码实现性能分析交换排序冒泡排序代码实现性能分析快速排序代码实现性能分析...
    99+
    2024-04-02
  • 【java】对ArrayList中的元素进行排序的几种方式
    对ArrayList中的元素进行排序的几种方式 一、使用Collections工具类 1、对基本类型排序 通过Collections.sort()对基本类型排序默认是以升序排序 // 1.Collec...
    99+
    2023-09-08
    java Collections ArrayList Comparable接口 排序算法
  • Java中,Map、List集合遍历、去重方式超详细总结
    Java中常用的遍历方式有: 普通for循环for-each循环使用迭代器(Iterator)Java8中的Stream   Map集合中常用的遍历方式: 4种 1.使用keySet()方法遍历Map的键: Map map = new...
    99+
    2023-10-07
    java 开发语言
  • Java中使用Lambda表达式对集合排序
    文章目录 一.利用lambda对list集合排序1.升序排序2.降序排序对对象集合操作,其实与基本类型集合操作类似对 JSONArray 排序 二.java8-Lambda中比较器Comp...
    99+
    2023-09-11
    java 开发语言
  • Java集合的总体框架相关知识总结
    目录一、集合概述二、集合在开发中的应用三、集合存储的数据四、集合的包五、集合的两大类一、集合概述 数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它的数据。 二、集合在开发...
    99+
    2024-04-02
  • C#怎么对集合进行排序和过滤操作
    对于集合的排序和过滤操作,可以使用LINQ(Language-Integrated Query)来实现。以下是一些常见的对集合进行排...
    99+
    2024-03-06
    C#
  • 如何进行C语言数据结构与算法中的排序总结
    这篇文章将为大家详细讲解有关如何进行C语言数据结构与算法中的排序总结,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、前言学习目标:排序和查找密不可分,将待处理的数据按关键值大小有序排列后,...
    99+
    2023-06-22
  • Java如何使用Collections.sort对中文进行排序方式
    本篇文章为大家展示了Java如何使用Collections.sort对中文进行排序方式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用Collections.sort对中文进行排序使用collec...
    99+
    2023-06-25
  • Python输入整数进行排序方式
    目录Python输入整数进行排序将输入的n个数进行大小排序:小到大和大到小1.从小到大排序2.从大到小排序总结Python输入整数进行排序 任务:自定需要排序数字的个数,对这些数字进...
    99+
    2022-12-20
    Python排序 输入整数进行排序 Python输入整数排序
  • Java实现两个随机数组合并进行排序的方法
    目录前言:一、什么是线性表二、ArrayList集合三、用线性表的思想排序数组间排序四、冒泡排序:前言: ​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了...
    99+
    2024-04-02
  • java自动排序的集合怎么写
    Java中有多种自动排序的集合类可以使用,其中最常用的是TreeSet和TreeMap。 TreeSet是一个有序的集合,它根据元素...
    99+
    2024-02-29
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作