Arrays类是数组的操作类,定义在java.util包中,主要功能是实现数组元素的查找/数组内容的充填/排序等功能。我们都知道,在Java SE中sort() 方法用于对数组的元素进行排序,下面我们就来看看排序数组的sort方法。该方法的参数不仅可以是基础数据类型的数组,也可以是对象引用的数组。同时还可以指定数组中需要排序的元素的索引范围。
当对对象进行排序时,数组中的所有元素都必须实现 Comparable 接口。即数组中的所有元素都必须是可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException)
排序规则:由小到大排序
package com.shxt.demo03;
import java.util.Arrays;
public class ArraysTest01 {
public static void main(String[] args) {
int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a);
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
排序规则:先大写后小写
package com.shxt.demo03;
import java.util.Arrays;
public class ArraysTest02 {
public static void main(String[] args) {
String[] a = {"a","A","b","B"};
Arrays.sort(a);
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
排序规则:严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort
package com.shxt.demo03;
import java.util.Arrays;
public class ArraysTest03 {
public static void main(String[] args) {
String[] a = {"a","C","b","D"};
Arrays.sort(a,String.CASE_INSENSITIVE_ORDER);
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
排序规则:先小写后大写
字符串反向
package com.shxt.demo03;
import java.util.Arrays;
import java.util.Collections;
public class ArraysTest04 {
public static void main(String[] args) {
String[] a = {"a","A","b","B"};
Arrays.sort(a, Collections.reverseOrder());//Collections 集合类中的工具类
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
数字排序,要使用包装类
package com.shxt.demo03;
import java.util.Arrays;
import java.util.Collections;
public class ArraysTest05 {
public static void main(String[] args) {
//不能使用基本数据类型
Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a, Collections.reverseOrder());
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
这个里面我们使用了Collections工具类,如果想自己完成规则的定义,那么就需要使用比较器接口Comparable(简单了解即可)
package com.shxt.demo03;
import java.util.Arrays;
import java.util.Comparator;
public class ArraysTest05_1 {
public static void main(String[] args) {
//不能使用基本数据类型
Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a, new IntegerComparator());
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
/**
* Comparator是一个接口
* 所以这里我们自己定义的类IntegerComparator要implents该接口
* 而不是extends Comparator
*
*/
class IntegerComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
//如果o1小于o2,我们就返回正值,如果n1大于n2我们就返回负值,
//这样颠倒一下,就可以实现反向排序了
if(o1 < o2) {
return 1;
}else if(o1 > o2) {
return -1;
}else {
return 0;
}
}
}
package com.shxt.demo03;
import java.util.Arrays;
import java.util.Collections;
public class ArraysTest04 {
public static void main(String[] args) {
String[] a = {"a","C","b","D"};
Arrays.sort(a, Collections.reverseOrder());
Collections.reverse(Arrays.asList(a));//先忽略吧
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + "\t");
}
}
}
Arrays.sort(int[] a, int fromIndex, int toIndex)
这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序!
package com.shxt.demo03;
import java.util.Arrays;
public class ArraysTest07 {
public static void main(String[] args) {
int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a, 0, 3);
for(int i = 0; i < a.length; i ++) {
System.out.print(a[i] + " ");
}
}
}
//运行结果为: 7 8 9 2 3 4 1 0 6 5
Java初学者最常见的错误思想,就是试图去写一些方法来完成数组的排序功能,其实,数组排序功能,在java的api里面早已实现,我们没有必要去重复制造轮子。如果你是初入Java学习的小伙伴,可以在动力节点在线网站上免费学习各种Java基础知识,名师讲授,通俗易懂,经常好课,等你来学!
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54