java中Arrays.sort()排序方法舉例詳解
Java中的Arrays.sort()方法是一種內(nèi)置的排序方法,用于對數(shù)組進行排序。這是一個來自java.util.Arrays類的靜態(tài)方法,用于對所有的基本數(shù)據(jù)類型對象數(shù)組以及對象數(shù)組進行排序。排序的默認順序是升序。
一、方法重載
Arrays.sort()方法有許多重載版本,可以接受不同類型的輸入,并對它們進行排序。以下是一些常見的重載版本:
Arrays.sort(byte[] a): 對字節(jié)型數(shù)組進行排序Arrays.sort(char[] a): 對字符型數(shù)組進行排序Arrays.sort(double[] a): 對雙精度浮點型數(shù)組進行排序Arrays.sort(float[] a): 對浮點型數(shù)組進行排序Arrays.sort(int[] a): 對整型數(shù)組進行排序Arrays.sort(long[] a): 對長整型數(shù)組進行排序Arrays.sort(short[] a): 對短整型數(shù)組進行排序Arrays.sort(Object[] a): 對對象數(shù)組進行排序,此方法要求數(shù)組中的對象必須實現(xiàn)了Comparable接口Arrays.sort(T[] a, Comparator<? super T> c): 對對象數(shù)組進行排序,使用一個定制的Comparator對象來比較數(shù)組中的元素
二、注意事項
對于對象數(shù)組,如果使用默認的
Arrays.sort(Object[] a)方法進行排序,那么數(shù)組中的對象必須實現(xiàn)了Comparable接口。如果對象沒有實現(xiàn)這個接口,那么在運行時會拋出ClassCastException。Arrays.sort(T[] a, Comparator<? super T> c)這個版本的方法允許你傳入一個Comparator對象來自定義排序的規(guī)則。如果傳入的Comparator對象為null,那么此方法將會使用元素的自然順序進行排序。對于對象數(shù)組的排序,
Arrays.sort()方法使用的是穩(wěn)定的排序算法,這意味著等值的元素在排序后會保持他們原有的相對位置。Arrays.sort()方法的時間復雜性為O(n log n)。Arrays.sort()方法會對輸入的數(shù)組進行直接排序,也就是說,它會改變輸入數(shù)組的元素順序。如果不希望改變原數(shù)組的元素順序,那么在排序前需要先對數(shù)組進行復制。
三、舉例
(1)對于基本數(shù)據(jù)類型的數(shù)組,排序時會按照升序排序;
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(arr); // 對數(shù)組進行排序
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}輸出結果:
1 1 2 3 3 4 5 5 5 6 9
ps:Arrays.sort() 方法使用的是快速排序算法和歸并排序算法,具體使用哪一種算法取決于數(shù)組的大小和類型。當數(shù)組長度小于 Arrays.MIN_ARRAY_SORT_GRAN 時,使用插入排序算法對其進行排序。
(2)對對象數(shù)組進行排序
可以通過實現(xiàn) Comparator 接口來指定比較器對象。Comparator 接口需要實現(xiàn) compare() 方法,該方法接受兩個對象作為參數(shù),并返回一個整數(shù)值,用于表示這兩個對象的大小關系。如果返回的值為負數(shù),則表示第一個對象小于第二個對象,為正序;如果返回的值為正數(shù),則表示第一個對象大于第二個對象,為逆序;如果返回的值為0,則表示兩個對象相等。
import java.util.*;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class PersonAgeComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("Alice", 25),
new Person("Bob", 20),
new Person("Charlie", 30)
};
Arrays.sort(people, new PersonAgeComparator());
for (Person p : people) {
System.out.println(p.getName() + " " + p.getAge());
}
}
}輸出結果
Bob 20
Alice 25
Charlie 30
在該示例中,定義了一個 Person 類,包含兩個屬性 name 和 age。我們按照年齡對 Person 對象數(shù)組進行排序,創(chuàng)建了一個 PersonAgeComparator 類,實現(xiàn)了 Comparator 接口,并重寫了 compare() 方法。在 main() 方法中,調(diào)用 Arrays.sort() 方法,并入 PersonAgeComparator 對象,來對 Person 對象數(shù)組進行排序。
總結
到此這篇關于java中Arrays.sort()排序方法的文章就介紹到這了,更多相關java Arrays.sort()排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中Spring使用Quartz任務調(diào)度定時器
本篇文章主要介紹了Java中Spring使用Quartz任務調(diào)度定時器,具有一定的參考價值,有興趣的可以了解一下。2017-02-02
通過自定制LogManager實現(xiàn)程序完全自定義的logger
本章主要闡述怎么完全定制化LogManager來實現(xiàn)應用程序完全自定制的logger,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
java 父類子類有同名方法時如何調(diào)用的實現(xiàn)
這篇文章主要介紹了java 父類子類有同名方法時如何調(diào)用的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
JavaWeb Spring注解Annotation深入學習
這篇文章主要為大家詳細介紹了JavaWeb Spring注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09

