国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - java中的arrays.sort()代碼詳解

java中的arrays.sort()代碼詳解

2021-03-11 14:15Mrzhoug JAVA教程

這篇文章主要介紹了Java中的Arrays.sort()代碼詳解,涉及Arrays.sort()簡單示例,策略模式,”super”的使用等相關內容,具有一定借鑒價值,需要的朋友可以參考下。

Arrays.sort(T[], Comparator < ? super T > c) 方法用于對象數組按用戶自定義規則排序.
官方Java文檔只是簡要描述此方法的作用,并未進行詳細的介紹,本文將深入解析此方法。

1. 簡單示例

sort方法的使用非常的簡單明了,下面的例子中,先定義一個比較Dog大小的Comparator,然后將其實例對象作為參數傳給sort方法,通過此示例,你應該能夠快速掌握Arrays.sort()的使用方法。

java" id="highlighter_819099">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Arrays;
import java.util.Comparator;
class Dog{
    int size;
    public Dog(int s){
        size = s;
    }
}
class DogSizeComparator implements Comparator<Dog>{
    @Override
      public int compare(Dog o1, Dog o2) {
        return o1.size - o2.size;
    }
}
public class ArraySort {
    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);
        Arrays.sort(dogArray, new DogSizeComparator());
        printDogs(dogArray);
    }
    public static void printDogs(Dog[] dogs){
        for (Dog d: dogs)
              System.out.print(d.size + " " );
        System.out.println();
    }
}

輸出為:

?
1
2
2 1 3
1 2 3

2.使用策略模式

這是策略模式(Strategypattern)的一個完美又簡潔的示例,值得一提的是為什么這種場景下適合使用策略模式.

總體來說,策略模式允許在程序執行時選擇不同的算法.比如在排序時,傳入不同的比較器(Comparator),就采用不同的算法.

根據上面的例子,假設你想要根據Dog的重量來進行排序,可以像下面這樣,創建一個新的比較器來進行排序:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 o1.size - o2.size;
    }
}
class DogWeightComparator implements Comparator<Dog>{
    @Override
      public int compare(Dog o1, Dog o2) {
        return o1.weight - o2.weight;
    }
}
public class ArraySort {
    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);
        Arrays.sort(dogArray, new DogSizeComparator());
        printDogs(dogArray);
        Arrays.sort(dogArray, new DogWeightComparator());
        printDogs(dogArray);
    }
    public static void printDogs(Dog[] dogs){
        for (Dog d: dogs)
              System.out.print("size="+d.size + " weight=" + d.weight + " ");
        System.out.println();
    }
}

執行結果:

?
1
2
3
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

Comparator是一個接口,所以sort方法中可以傳入任意實現了此接口的類的實例,這就是策略模式的主要思想.

3.為何使用”super”

如果使用“Comparator<T>c”那是很簡單易懂的,但是sort的第2個參數里面的<?superT>意味著比較器所接受的類型可以是T或者它的超類.為什么是超類呢?答案是:這允許使用同一個比較器對不同的子類對象進行比較.在下面的示例中很明顯地演示了這一點:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Arrays;
import java.util.Comparator;
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 o1.size - o2.size;
    }
    //in this way, all sub classes of Animal can use this comparator.
}
public class ArraySort {
    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);
        Arrays.sort(dogArray, new AnimalSizeComparator());
        printDogs(dogArray);
        System.out.println();
        //when you have an array of Cat, same Comparator can be used. 
        Cat c1 = new Cat(2);
        Cat c2 = new Cat(1);
        Cat c3 = new Cat(3);
        Cat[] catArray = {c1, c2, c3};
        printDogs(catArray);
        Arrays.sort(catArray, new AnimalSizeComparator());
        printDogs(catArray);
    }
    public static void printDogs(Animal[] animals){
        for (Animal a: animals)
              System.out.print("size="+a.size + " ");
        System.out.println();
    }
}

輸出結果:

?
1
2
3
4
size=2 size=1 size=3
size=1 size=2 size=3
size=2 size=1 size=3
size=1 size=2 size=3

4. 小結

與Arrays.sort()相關的信息總結如下:

通用: super 類
策略設計模式(strategy pattern);
歸并排序(merge sort): 時間復雜度 n*log(n);
Java.util.Collections#sort(List < T > list, Comparator < ? super T > c)與Arrays.sort 使用類似的思想.

總結

以上就是本文關于Java中的Arrays.sort()代碼詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他Java相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/Mrzhoug/article/details/51197626

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91网视频 | 亚洲激情视频 | 成人国产精品久久久 | 国产在线观看高清 | 欧美激情一区二区 | 久久久综合视频 | 国产四区 | 国产高清亚洲 | 蜜桃色网 | 欧美午夜一区二区三区免费大片 | 国产一区二区在线免费观看 | 久久综合亚洲精品 | 亚洲美女网站 | 日日操av | 午夜免费电影 | 精品在线一区二区三区 | 国产第一亚洲 | 欧美不卡 | 亚洲av毛片一区二二区三三区 | 一区二区三区国产视频 | 不卡视频一区二区 | 亚洲精品综合 | 亚洲国产成人av | 一区二区三区免费播放 | 亚洲电影二区 | 久久久国产99久久国产一 | 精品国产鲁一鲁一区二区在线观看 | 国内精品三级 | 激情总合网 | 国产伦精品一区二区三区四区视频 | 亚洲精品一区二三区不卡 | 国产精品99久久久久久动医院 | 国产综合视频在线观看 | 精品一区二区三区中文字幕老牛 | 国产一区二区三区欧美 | 91精品国产乱码久久久久久 | 二区影院| 日韩精品一区二区三区在线 | 欧美午夜精品久久久久久浪潮 | 激情综合激情 | 日韩中文字幕在线视频 |