一、介绍
- 1、sort(T[] a) 的使用
- 2、sort(T[] a,int formIndex, int toIndex) 的使用
- 3、sort(T[] a, Comparator supre T> c)的使用
- 补充:sort(T[] a, Comparator supre T> c)类对象比较的使用
- 补充:那么在参数中会出现super呢?这意味着这类型可以是T或者它的父类型。这就是的该方法可以允许所有子类使用相同的比较器。
()的作用是对括号中的数组进行排序,时间复杂度O(n*logn),方法返回值为void。 是在原来数组的空间基础上进行升序排序,因此不需要定义一个数组接收它,即不需要返回值。
()重载了四类方法:
sort(T[] a):对指定T型数组按数字升序排序。
sort(T[] a,int formIndex, int toIndex):对指定T型数组的指定范围按数字升序排序。
sort(T[] a, Comparator<? supre T> c): 根据指定比较器产生的顺序对T型数组进行排序。
sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c): 根据指定比较器产生的顺序对T型数组的指定范围进行排序。
1、sort(T[] a) 的使用
import ;
import ;
public class ArraysSort {
public static void main(String[] args) {
int[] a={2,5,4,3,1,8};
(a);
((a));
}
}// 结果// [1, 2, 3, 4, 5, 8]
2、sort(T[] a,int formIndex, int toIndex) 的使用
import ;
import ;
public class ArraysSort {
public static void main(String[] args) {
int[] a={2,5,4,3,1,8};
(a,2,5);
((a));
}
}
// 结果
// [2, 5, 1, 3, 4, 8]
3、sort(T[] a, Comparator<? supre T> c)的使用
// 按第一维元素比较二维数组
import ;
import ;
public class ArraysSort {
public static void main(String[] args) {
int[][] nums=new int[][]{{1,3},{1,2},{4,5},{3,7}};
//方法一
(nums,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
if(a[0]==b[0]){ // 不明白为什么要这样写 ,自己的基础有问题,不解
return a[1]-b[1];
}else{
return a[0]-b[0];
}
}
});
for (int[] num : nums) {
((num));
}
}
}
// 结果
/*
[1, 2]
[1, 3]
[3, 7]
[4, 5]
*/
// 按照第二维元素比较二维数组
import ;
import ;
public class ArraysSort {
public static void main(String[] args) {
int[][] nums=new int[][]{{1,3},{1,2},{4,5},{3,7}};
//方法一
(nums,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
if(a[1]==b[1]){ //同样不解
return a[0]-b[0];
}else{
return a[1]-b[1];
}
}
});
//方法二
/*(nums,(a,b)->a[1]-b[1]);*/
for (int[] num : nums) {
((num));
}
}
}
// 结果
/*
[1, 2]
[1, 3]
[4, 5]
[3, 7]
*/
补充:sort(T[] a, Comparator<? supre T> c)类对象比较的使用
import ;
import ;
class Dog{
int size;
int weight;
public Dog(int s, int w){
size = s;
weight = w;
}
}
class DogSizeComparator implements Comparator<Dog>{
@Override
public int compare(Dog o1, Dog o2) {
return - ;
}
}
class DogWeightComparator implements Comparator<Dog>{ // **在这里尖括号传入的是对象**
@Override
public int compare(Dog o1, Dog o2) {
return - ;
}
}
public class ArraysSort {
public static void main(String[] args) {
Dog d1 = new Dog(2, 50);
Dog d2 = new Dog(1, 30);
Dog d3 = new Dog(3, 40);
Dog[] dogArray = {d1, d2, d3};
printDogs(dogArray);
(dogArray, new DogSizeComparator());
printDogs(dogArray);
(dogArray, new DogWeightComparator());
printDogs(dogArray);
}
public static void printDogs(Dog[] dogs){
for(Dog d: dogs)
("size="+ + " weight=" + + " ");
();
}
}
// 结果
/*
size=2 weight=50 size=1 weight=30 size=3 weight=40
size=1 weight=30 size=2 weight=50 size=3 weight=40
size=1 weight=30 size=3 weight=40 size=2 weight=50
*/
补充:那么在参数中会出现super呢?这意味着这类型可以是T或者它的父类型。这就是的该方法可以允许所有子类使用相同的比较器。
import ;
import ;
class Animal{
int size;
}
class Dog extends Animal{
public Dog(int s){
size = s;
}
}
class Cat extends Animal{
public Cat(int s){
size = s;
}
}
class AnimalSizeComparator implements Comparator<Animal>{
@Override
public int compare(Animal o1, Animal o2) {
return - ;
}
}
public class ArraysSort {
public static void main(String[] args) {
Dog d1 = new Dog(2);
Dog d2 = new Dog(1);
Dog d3 = new Dog(3);
Dog[] dogArray = {d1, d2, d3};
printDogs(dogArray);
(dogArray, new AnimalSizeComparator());
printDogs(dogArray);
();
Cat c1 = new Cat(2);
Cat c2 = new Cat(1);
Cat c3 = new Cat(3);
Cat[] catArray = {c1, c2, c3};
printDogs(catArray);
(catArray, new AnimalSizeComparator());
printDogs(catArray);
}
public static void printDogs(Animal[] animals){
for(Animal a: animals)
("size="+ + " ");
();
}
}
// 结果
/*
size=2 size=1 size=3
size=1 size=2 size=3
size=2 size=1 size=3
size=1 size=2 size=3
*/
巨人的肩膀:/SupremeBoy/p/