java中排序函数sort()使用,Arrays.sort()和Collections.sort()

Java中常用的数组或集合排序的方法有两个,一个是java.util.Arrays中的静态方法Arrays.sort(),还有一个是java.util.Collections中的静态方法的Collections.sort()方法,下面分别介绍两种用法。

一.java.util.Arrays中的静态方法Arrays.sort()

Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序。

.......

关于引用对象类型数组的排序sort()方法要用到接口Comparator<T>,对其排序内部的比较函数compare()进行重写,以便于我们按照我们的排序要求对引用对象数组极性排序,默认是升序排序,但可以自己自定义成降序排序。关于Comparator<T>的介绍见官方文档

sort

public static <T> void sort(T[] a,
                            Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。数组中的所有元素都必须是通过指定比较器 可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言, c.compare(e1, e2) 不得抛出 ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
c - 确定数组顺序的比较器。 null 值指示应该使用元素的 自然顺序
抛出:
ClassCastException - 如果数组包含使用指定的比较器不 可相互比较的 的元素。

sort

public static <T> void sort(T[] a,
                            int fromIndex,
                            int toIndex,
                            Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。)此范围内的所有元素都必须是通过指定比较器 可相互比较的(也就是说,对于该范围中的任何 e1 和 e2 元素而言, c.compare(e1, e2) 不得抛出 ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
fromIndex - 要排序的第一个元素的索引(包括)
toIndex - 要排序的最后一个元素的索引(不包括)
c - 确定数组顺序的比较器。 null 值指示应该使用元素的 自然顺序
抛出:
ClassCastException - 如果数组包含使用指定的比较器不 可相互比较的 的元素。
IllegalArgumentException - 如果 fromIndex > toIndex
ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length

下面上实例:

package test;
import java.util.Arrays;
import java.util.Comparator;
//用Arrays中的sort()对数组进行排序
public class test4 {
	//年龄比较器
	Comparator<student> comparatorAge =new Comparator <student>(){
		public int compare(student p1,student p2){
			if (p1.getAge()>p2.getAge())
				return 1;
			else if (p1.getAge()<p2.getAge())
				return -1;
			else
				return 0;
		}
	};

	//成绩比较器
	Comparator<student> comparatorGrade =new Comparator <student>(){
		public int compare(student p1,student p2){
			if (p1.getGrade()>p2.getGrade())
				return 1;
			else if (p1.getGrade()<p2.getGrade())
				return -1;
			else
				return 0;
		}
	};

	public student [] ageSort(student[] s){
		Arrays.sort(s,comparatorAge);
		return s;
	}

	public student [] gradeSort(student[] s){
		Arrays.sort(s,comparatorGrade);
		return s;
	}

	public static void main(String[] args) {
		 test4 tt=new test4();
		 student p1 = new student() ;
		         p1.setAge( 10 );
		         p1.setName( "p1" );
		         p1.setGrade( 98 );

		         student p2 = new student() ;
		         p2.setAge( 30 );
		         p2.setName( "p2" );
		         p2.setGrade( 70 );

		         student p3 = new student() ;
		         p3.setAge( 20 );
		         p3.setName( "p3" );
		         p3.setGrade( 83 );

		         student p4 = new student() ;
		         p4.setAge( 15 );
		         p4.setName( "p4" );
		         p4.setGrade( 80 );

		student [] list = {p1,p2,p3,p4} ;		 

		student []agePrint=  tt.ageSort(list);
		for (student ss : agePrint) {
			 System.out.println("student age sort ," + ss.getName() + "  " + ss.getAge() +" " +ss.getGrade());
		 }//按年龄排序

		student []gradePrint=  tt.gradeSort(list);
		for (student ss : gradePrint) {
			 System.out.println("student grade sort ," + ss.getName() + "  " + ss.getAge() +" " +ss.getGrade());
		 }//按成绩排序

	}

}

//创建一个类型,用于比较的引用对象类型
class student{
	private String name;
	private int age;
	private float grade;

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

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

    public void setGrade(float grade) {
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

	public int getAge() {
        return age;
    }

    public float getGrade() {
        return grade;
    }
 }

结果如下:

student age sort ,p1  10 98.0
student age sort ,p4  15 80.0
student age sort ,p3  20 83.0
student age sort ,p2  30 70.0
student grade sort ,p2  30 70.0
student grade sort ,p4  15 80.0
student grade sort ,p3  20 83.0
student grade sort ,p1  10 98.0

  

二. java.util.Collections中的静态方法的Collections.sort()

  java.util.Collections中的静态方法的Collection.sort()主要是针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。

关于Comporator 的介绍和上面相同,主要是针对里面compare()的重写

下面上实例:

package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
//用Collections的sort()方法对集合进行排序。
/*
 * 题目:
 * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
 * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
 */

public class test3 {

    public String PrintMinNumber(Integer [] s) {
        if(s==null) return null;
        String s1="";
        ArrayList<Integer> list=new ArrayList<Integer>(Arrays.asList(s));
//        for(int i=0;i<s.length;i++){
//             list.add(s[i]);
//        }
        Collections.sort(list,new Comparator<Integer>(){//数组里的数两两组合比较,按照比较值更得的顺序升序排序
            public int compare(Integer str1,Integer str2){
                String s1=str1+""+str2;
                String s2=str2+""+str1;
                return s1.compareTo(s2);//变成-s1.compareTo(s2)就是降序排序了
            }
        });
         for(int j:list){
        	 System.out.println("输出为:"+j);
                s1+=j;
             }
        return s1;
    }

	public static void main(String[] args) {

		Integer [] list={3,32,321};
		test3 demo=new test3();
		 System.out.println(demo.PrintMinNumber(list));
	}

}

 结果如下:

输出为:321
输出为:32
输出为:3
321323

 最后,上面的两个实例只要改变相应的待排序数据的形式(数组,集合),都可以替换使用。

原文地址:https://www.cnblogs.com/zz22--/p/10705970.html

时间: 2024-10-13 15:26:32

java中排序函数sort()使用,Arrays.sort()和Collections.sort()的相关文章

Collections.sort的两种用法 转

Java代码   /** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortTest { public stati

Android Collections.sort的几种用法介绍

Java代码   /** * @author alex * @version 创建时间:2014-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortTest { public stati

[Java] java.util.Arrays 中使用的 sort 采用的算法 (转)

http://book.douban.com/annotation/15154366/Q: java.util.Arrays 中使用的 sort 采用的是什么算法? A: java中Arrays.sort使用了两种排序方法,quick sort 和优化的 merge sort. Q: 为什么采用两种排序算法? A: quick sort 主要是对哪些基本类型数据(int, short, long, float, double等)排序, 而 merge sort 用于对对象类型进行排序. Q: q

java Collections.sort()实现List排序的默认方法和自定义方法

1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list.add("王硕");list.add("李明");list.add("刘迪");list.add("刘布"); //升序Collections.sort(list,Collator.getInstance(java.util.Lo

Java基础集合类总结之Collections.sort()

面试中被问到,集合类中的排序方法是怎么实现的?没有回答上来,故而总结如下:你知道么? 前提:在eclipse中对于自己的代码可以通过按住Ctrl的同时单击名称跳入相应源码中.但eclipse默认没有添加java源代码目录,比如点击Thread会提示source not found,而在开发中了解Java源代码又是技术成长必要的.jdk默认是附带源码zip包的(jdk按装目录下的src.zip文件),我们可以通过添加源码在eclipse中查看.在提示source not found界面,点击Att

Java中Collections.sort()排序详解

第一种:Comparable 排序接口 若一个类实现了Comparable接口,就意味着"该类支持排序". 假设"有一个List列表(或数组),里面的元素是实现了Comparable接口的类",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如TreeMap)"中的键或"有序集合(Tree

39-java中Arrays.sort 和 collections.sort()总结

总结一下java 中的两种排序工具: Arrays.sort() : 主要针对 数组类型排序,如果数组里面的元素是对象,要按对象属性排序的话,需要重写 Comparator() 函数,重写里面的  int compare()函数; Collections.sort(): 主要是针对集合排序,如:list. 当然如果数组 array[i] 的每项是一个list 也可以直接用.与Arrays.sort()一样,重写 Comparator()函数. 注意:两种方式重写的函数方式是一样的,单词不要写错哟

Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用

摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.google.common.collect.Lists; import org.junit.Assert; import org.junit.Test; import java.util.Arrays; import java.util.Collections; import java.util.Comp

Java Collections.sort方法对list集合排序

1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class UserSort { public static void main(String[] args) { List<User> userList =new ArrayList<User&g