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()
方法的時間復(fù)雜性為O(n log n)。Arrays.sort()
方法會對輸入的數(shù)組進行直接排序,也就是說,它會改變輸入數(shù)組的元素順序。如果不希望改變原數(shù)組的元素順序,那么在排序前需要先對數(shù)組進行復(fù)制。
三、舉例
(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] + " "); }
輸出結(jié)果:
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ù)值,用于表示這兩個對象的大小關(guān)系。如果返回的值為負數(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()); } } }
輸出結(jié)果
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ù)組進行排序。
總結(jié)
到此這篇關(guān)于java中Arrays.sort()排序方法的文章就介紹到這了,更多相關(guān)java Arrays.sort()排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中Spring使用Quartz任務(wù)調(diào)度定時器
本篇文章主要介紹了Java中Spring使用Quartz任務(wù)調(diào)度定時器,具有一定的參考價值,有興趣的可以了解一下。2017-02-02通過自定制LogManager實現(xiàn)程序完全自定義的logger
本章主要闡述怎么完全定制化LogManager來實現(xiàn)應(yīng)用程序完全自定制的logger,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03java 父類子類有同名方法時如何調(diào)用的實現(xiàn)
這篇文章主要介紹了java 父類子類有同名方法時如何調(diào)用的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09JavaWeb Spring注解Annotation深入學(xué)習(xí)
這篇文章主要為大家詳細介紹了JavaWeb Spring注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09