java Arrays.sort()详解

int [][]a = new int [5][2];

//定义一个二维数组,其中所包含的一维数组具有两个元素

步骤

1 导入 java.util.Arrays 包。
2 使用 Armys.sort(数组名) 语法对数组进行排序,排序规则是从小到大,即升序。

默认升序

import java.util.Arrays;
public class Test1 {
    public static void main(String[] args) {
        int[] a = {4,6,8,2,1,4,9,2,4};
        Arrays.sort(a);
        for(int arr:a) {
            System.out.print(arr + " ");
        }
    }
}

注:这种有冒号的for循环叫做foreach(每一个)循环,foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。

for(元素数据类型 变量 : 数组或Collection集合){
使用变量即可,该变量就是元素
}

自定义

转自 Wtfstorms

import java.util.Arrays;
import java.util.Comparator;

public class Test1 {
    public static void main(String[] args) {
        //注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
        //而要使用它们对应的类
        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        //定义一个自定义类MyComparator的对象
        Comparator cmp = new MyComparator();
        Arrays.sort(a, cmp );
        for(int i:a) {
            System.out.print(i+ "\t");
        }
    }
}
//Comparator是一个接口,所以这里我们自己定义的类MyComparator要implents该接口,而不是extends Comparator
class MyComparator implements Comparator<Integer> {
    //如果o1小于o2,我们就返回正值,如果n1大于n2我们就返回负值,
    //这样颠倒一下,就可以实现反向排序了
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}

Comparable和Comparator都是用来实现对象的比较、排序
区别
Comparator位于java.util包下,而Comparable位于java.lang包下
Comparable接口的实现是在类的内部(如 String、Integer已经实现了Comparable接口,自己就可以完成比较大小操作),Comparator接口的实现是在类的外部(可以理解为Comparable是自已完成比较,Comparator是外部程序实现比较)
实现Comparable接口要重写compareTo方法, 在compareTo方法里面实现比较

先第一个元素,后第二个元素

对于一个已定义的二位数组a进行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升序排序(即a[][0]),若第一个元素相等,则按照第二个元素进行升序排序(a[][1])(特别注意,这里的a[][0]或者a[][1]在java中是不能这么定义的,这里只是想说明是对于某一个一维数组的第0或1个元素进行排序)

Arrays.sort(a, new Comparator<int[]>() {
	@Override
	public int compare(int[] o1, int[] o2) {
		if (o1[0]==o2[0]) {
			return o1[1]-o2[1];
			//o1[1]-o2[1]表示对于第二个元素进行升序排序,如果为o2[1]-o1[1]则表示为降序。
		}
		else {
			return o1[0]-o2[0];
		}
	}
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值