void jsSort() { int num[] = {1111,2222,3333,1132}; for(int i = 0; i < num.length; i++) { num[i] = num[i] % 1000; } Arrays.sort(num); System.out.println(Arrays.toString(num)); }
还可以自己实现Comparator接口。然后借助Arrays进行排序。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 - 如果数组包含使用指定的比较器不可相互比较的 的元素。
package com.xuz.csdn.july8;import java.util.Arrays; import java.util.Comparator;public class MySort { public static void main(String[] args) { MyNumber[] array = {new MyNumber(1003),new MyNumber(2000),new MyNumber(3002),new MyNumber(4000)}; Arrays.sort(array, new Comparator<MyNumber>() { @Override public int compare(MyNumber o1, MyNumber o2) { if ((o1.num % 1000) > (o2.num % 1000)) { return 1; } else if ((o1.num % 1000) < (o2.num % 1000)) { return -1; }
return 0; } }); for (MyNumber myNumber : array) { System.out.println(myNumber.num); } }}class MyNumber { int num ;
public MyNumber(int num){ this.num = num; } }
/** 要求编制函数 jsSort(),对任意几个在1000~9999之间的数,按每个数的后三位的大小进行升序排列, 然后取出满足此条件的前5个数依次存入数组bb中,如果后三位的数值相等 *///package com.ricky.www;import java.util.Arrays; import java.util.Random;public class Test{ public static void main(String[] args){ Random random = new Random(); Num[] nums = new Num[100]; for(int i = 0 ; i < 100 ; i ++){ nums[i] = new Num(1000 + random.nextInt(8999)); }
int i = 0; for(Num num : nums){ System.out.printf("%-5s",num); if(++ i % 10 == 0){ System.out.println(num); } }
Arrays.sort(nums); System.out.println("----------------------------------------------"); for(Num num : nums){ System.out.printf("%-5s",num); if(++ i % 10 == 0){ System.out.println(num); } } System.out.println("----------------------------------------------"); Num[] num1 = new Num[5]; //num1为需要的前5个元素组成的数组 for(int k = 0 ; k < 5 ; k ++){ num1[k] = nums[k]; } } public static class Num implements Comparable<Num>{ int num = 0; public Num(int num){ this.num = num; } public int compareTo(Num e1){ String str1 = (e1.num + "").substring(1); String str2 = (this.num + "").substring(1); return str2.compareTo(str1); } public String toString(){ return num + ""; } } }
{
int num[] = {1111,2222,3333,1132};
for(int i = 0; i < num.length; i++)
{
num[i] = num[i] % 1000;
}
Arrays.sort(num);
System.out.println(Arrays.toString(num));
}
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 - 如果数组包含使用指定的比较器不可相互比较的 的元素。
import java.util.Comparator;public class MySort { public static void main(String[] args) {
MyNumber[] array = {new MyNumber(1003),new MyNumber(2000),new MyNumber(3002),new MyNumber(4000)};
Arrays.sort(array, new Comparator<MyNumber>() {
@Override
public int compare(MyNumber o1, MyNumber o2) {
if ((o1.num % 1000) > (o2.num % 1000)) {
return 1;
} else if ((o1.num % 1000) < (o2.num % 1000)) {
return -1;
}
return 0;
}
});
for (MyNumber myNumber : array) {
System.out.println(myNumber.num);
}
}}class MyNumber {
int num ;
public MyNumber(int num){
this.num = num;
}
}
/**
要求编制函数 jsSort(),对任意几个在1000~9999之间的数,按每个数的后三位的大小进行升序排列,
然后取出满足此条件的前5个数依次存入数组bb中,如果后三位的数值相等
*///package com.ricky.www;import java.util.Arrays;
import java.util.Random;public class Test{
public static void main(String[] args){ Random random = new Random(); Num[] nums = new Num[100]; for(int i = 0 ; i < 100 ; i ++){
nums[i] = new Num(1000 + random.nextInt(8999));
}
int i = 0; for(Num num : nums){ System.out.printf("%-5s",num); if(++ i % 10 == 0){
System.out.println(num);
}
}
Arrays.sort(nums); System.out.println("----------------------------------------------"); for(Num num : nums){ System.out.printf("%-5s",num); if(++ i % 10 == 0){
System.out.println(num);
}
} System.out.println("----------------------------------------------"); Num[] num1 = new Num[5]; //num1为需要的前5个元素组成的数组 for(int k = 0 ; k < 5 ; k ++){
num1[k] = nums[k];
}
} public static class Num implements Comparable<Num>{
int num = 0; public Num(int num){
this.num = num;
} public int compareTo(Num e1){
String str1 = (e1.num + "").substring(1);
String str2 = (this.num + "").substring(1); return str2.compareTo(str1);
} public String toString(){
return num + "";
}
}
}