Arrays.sort()和Collections.sort()的用法及比较

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

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

Collections.sort 实质上调用的事Arrays.sort

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

Comparable 用作默认的比较方式 

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


像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。 
sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系 
sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系

具体例子如下:

Arrays.sort()

Java中的Arrays类的sort()方法,是Arrays类的静态方法,在需要对数组进行排序时非常好用。

1. Arrays.sort(int[] a)

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

import java.util.Arrays;
 
public class Main {
 
//Arrays.sort(int[] a)
	public static void main(String[] args) {
		int[] a={4,5,3,1,8};
		Arrays.sort(a);
		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]+" ");//结果  1 3 4 5 8 
		}
//System.out.println(Arrays.toString(a));
 
String[] array1=new String[]{"a","A","g","Z"};
       Arrays.sort(array1);
       System.out.println(Arrays.toString(array1));//先大写后小写 A Z a g
  
       Arrays.sort(array1,String.CASE_INSENSITIVE_ORDER);
       System.out.println(Arrays.toString(array1));//字符串字母表排序 忽略大小写
 
       Integer[] list={3,4,2,6,8};
       Arrays.sort(list,Collections.reverseOrder());
       System.out.println(Arrays.toString(list));//倒序(由大到小)输出  8 6 4 3 2
 
 
	}
 
}

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

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

import java.util.Arrays;
 
public class Main {
 
//Arrays.sort(int[] a,int fromIndex,int toIndex)
	public static void main(String[] args) {
		int[] a={5,3,1,6,8,9,3};
		Arrays.sort(a,0,3);
		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]+" ");// 结果为 1 3 5 6 8 9 3 只对下标为 0 1 2的进行排序
		}
 
	}
 
}

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.使用Collections.sort(List<> list)需要使用List

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
 
public class Main9 {
 
//Collections.sort()
	public static void main(String[] args) {
		int a=1,b=7,c=4,d=5;
		List<Integer> list=new ArrayList<Integer>();
		list.add(a);list.add(b);list.add(c);list.add(d);
		Comparator cmp=new MyComparator();
		Collections.sort(list,cmp);
		Iterator<Integer> it=list.iterator();
		while(it.hasNext())
		{
			System.out.print(it.next()+" ");
		}
 
	}
	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;
		}
		
	}
 
}
发布了23 篇原创文章 · 获赞 1 · 访问量 4272

猜你喜欢

转载自blog.csdn.net/michiko98/article/details/104888465