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