首页 > 其他分享 >Arrays.sort()与Collections.sort()的用法以及区别

Arrays.sort()与Collections.sort()的用法以及区别

时间:2024-07-26 12:53:23浏览次数:16  
标签:sort name Comparator Arrays age int Collections public

目录

Arrays.sort()与Collections.sort()的区别

Arrays.sort 针对任意对象,排序的类型就为传入的对象类
如:Arrays.sort(a)//这里a为数组,可以是 int/String /类 数组,排序类型依次为int ,String ,类

Collections.sort 针对集合(List),排序类型为List对应的类型
如:Collections.sort (l)//这里l为List 对象,可以为List< Integer>/List< String>/List<类> ,排序类型依次为Integer,String ,类

对象数组的排序方式

要实现对对象数组的排序,要先实现Comparable或者Comparator接口。他们的区别如下:

Comparable 用作默认的比较方式

Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用。

sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系
sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系

Arrays.sort()的方法

1. Arrays.sort(int[] a)

对数组的所有元素进行排序,从小到大排序

2.Arrays.sort(int[] a,int fromIndex,int toIndex)

对数组部分排序,对数组a的下标从fromIndex到toIdex-1进行排序
注意:下标为toIndex的元素不参与排序

3.Arrays.sort(Integer[] a,Comparator cmp)

Arrays.sort()只能由小到大排序 ,那么 如何由大到小排序呢?

最简单的方法是,使用定义好的方法Arrays.sort(Integer[] a, Collections.reverseOrder()),其中,Collections.reverseOrder()会返回一个Comparator,可以直接使用。

也可以自定义Comparator

import java.util.Arrays;
import java.util.Comparator;
 
public class Main{
 
//利用 Arrays.sort(Integer[] a,Comparator cmp) 进行由大到小排序
	public static void main(String[] args) {
		Integer[] a={4,9,1,3,5,8};//注意 Integer
		Comparator cmp=new MyComparator();
		Arrays.sort(a,cmp);
		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]+" ");
		}
	}
	public static class MyComparator implements Comparator<Integer>
	{
		public int compare(Integer arg0, Integer arg1) {
			if(arg0<arg1)
				return 1;
			else if(arg0>arg1)
				return -1;
			else
				return 0;
		}
	}
}

Collections.sort()的方法

1.sort(List list)

  1. 功能:此方法根据元素的自然顺序对指定列表按升序进行排序。
  2. 要求:此方法要求集合元素有自己的排序规则,即要求元素必须实现了comparable接口,且重写了compareTo方法。也就是说对于集合中的任意两个元素e1,e2,e1.compareTo(e2)不能抛出异常。
  3. 参数:list集合的实例对象(ArrayList对象或者linledlist),不可以是set集合对象
  4. 实例:自定义一个person类,包含name和age,要求根据age排序。

Person类

public class person implements Comparable<person> { //实现comparable接口
    private String name;
    private int age;

    public person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(person o) {  //重写compareTo方法
        return this.getAge()-o.getAge();  //  根据age进行升序排序,若反过来则是降序
    }
}

主函数

import java.util.ArrayList;
import java.util.Collections;

public class Demo01Stringcomp {
    public static void main(String[] args) {
        ArrayList<person> list1=new ArrayList<>();
        list1.add(new person("张三",25));
        list1.add(new person("李四",20));
        list1.add(new person("王五",20));
        Collections.sort(list1);
        System.out.println(list1);
    }

}

2.sort(List list, Comparator<? super T> c)

  1. 功能:根据指定比较器Comparator产生的排序规则对list集合对象进行排序;
  2. 参数:List list — list集合的实例对象(ArrayList对象或者linledlist);
    Comparator<? super T> c—Comparator接口产生的对象(可以使用匿名内部类)
  3. 要求:不再要求集合元素具有自己的排序规则,即不再需要实现comparable接口;
  4. 实例:自定义一个student类,包含name和age属性,根据age排序;

Student类

public class students {
    private String name;
    private int age;

    public students(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public students() {
    }

    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 String toString() {
        return "students{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

主函数

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

public class Demo02Comparator {
    public static void main(String[] args) {
        ArrayList<students> stu = new ArrayList<>();
        stu.add(new students("rank",20));
        stu.add(new students("Jack",16));
        stu.add(new students("Tom",18));
        /*使用匿名内部类创建Comparator接口的对象作为参数
          匿名内部类:直接通过接口名称创建对象,省去接口的实现类
          其格式为:接口名称 对象名 = new  接口名称 () {覆盖重写接口的所有抽象方法}
         */
        Collections.sort(stu, new Comparator<students>() {
            @Override
            public int compare(students o1, students o2) {
                return o1.getAge()-o2.getAge();  //根据age进行升序排序
            }
        });
        System.out.println(stu);
    }
}

标签:sort,name,Comparator,Arrays,age,int,Collections,public
From: https://blog.csdn.net/qq_55846232/article/details/140707590

相关文章

  • C#实现MergeSort算法
    publicclassMergeSortLearn{///<summary>///分治递归///</summary>///<paramname="oriArray"></param>///<returns></returns>publicstaticdouble[]MergeSort(double[]oriArray){......
  • ava 集合框架全解析:Collection vs Collections,Comparable vs Comparator,HashSet 工作
    Java中的集合框架是开发过程中不可或缺的一部分,但初学者常常会混淆其中的术语,特别是Collection和Collections。这篇博客将详细介绍它们之间的区别,并进一步探讨Comparable和Comparator、HashSet的工作原理,以及HashMap和Hashtable的区别。Collection和Collecti......
  • __yolov5+deepsort+slowfast win部署
     运行程序报错:yolov5_trt_create...yolov5_trt_createcudaengine...yolov5_trt_createbuffer...yolov5_trt_createstream...yolov5_trt_createdone...createyolov5-trt,instance=000001AFB3B05EC0[07/19/2024-21:23:10][E][TRT]1:[stdArchiveRea......
  • 并行化 numpy.sort
    我需要对长度为1e8-1e9的uint64数组进行排序,这是我当前项目中的性能瓶颈之一。我最近刚刚更新了numpyv2.0版本,其中排序算法得到了显着优化。在我的硬件上测试它,它比numpyv1.26版本快大约5倍。但目前numpy的排序算法即使使用SIMD,也无法利用多核CPU。我尝试将其并行......
  • 【python】Python高阶函数--sorted函数的高阶用法解析与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • Python中用来排序的方法sort、sorted
    sort与sorted区别:sort是应用在list上的方法,而sorted可以对所有可迭代的对象(他们可以是list、dict、set、甚至是字符串)进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,无返回值,而内建函数sorted方法返回的是一个新的list,而不是在原来的基础上进行......
  • Imbalanced Arrays
    还没有仔细看官方题解和洛谷题解,重新做的时候看一下有没有什么可以吸收的说一下我的做法:首先看到第二个条件,不难想出\(i\)和\(-i\)只有可能选一个,此时观察样例,以及发现\(b\)刚好有\(n\)个数,所以不难想到最终\(b\)的构造方案是由\(1\)~\(n\)的每一个数或其相反数组成的,且每个数......
  • 快速排序quicksort
    #include<iostream>usingnamespacestd;intpartition(inta[],intlow,inthigh){ intpivot=a[low]; while(low<high) { while(low<high&&a[high]>=pivot)//先从high开始 high--; a[low]=a[high]; while(low<high......
  • 插入排序 insertsort
    #include<iostream>usingnamespacestd;voidinsertsort(inta[],intn){ inti,j,key; for(i=1;i<n;i++) { if(a[i]<a[i-1]) { key=a[i]; for(j=i-1;j>=0&&a[j]>key;j--) a[j+1]=a[j]; a[j......
  • java数组之数组工具类——Arrays的使用
    一、Arrays工具类简述    在java的类库中有许多现成的已经封装好的方法,可以供开发人员使用,比如我们之前学的二分法查找或者快速排序等。所以在实际的开发中,我们是不用自己编写这些常用的方法的。那么在常用的数组方法在哪里的?java作为面向对象的语言,所有方法都会封装......