国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 中數(shù)組的排序(基本類型,對象類型)

這篇具有很好參考價(jià)值的文章主要介紹了Java 中數(shù)組的排序(基本類型,對象類型)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言: 本文主要針對的是 Java 自帶的排序函數(shù)/接口

1. Java 中數(shù)組的自定義排序方法

實(shí)現(xiàn) Comparable 接口中的 compareTo 函數(shù)或?qū)崿F(xiàn) Comparator 接口中的 compare 函數(shù)

兩者存在使用上的區(qū)別,大體而言,Comparable 接口是為類服務(wù),Comparator 接口是為 sort (Arrays.sort / Collections.sort)方法服務(wù)

1.1 基本類型

基本類型存在很多種,這里舉例 int 型數(shù)組

1.1.1 升序排列

例如想要升序排序 int 型數(shù)組 nums,可以通過調(diào)用 Arrays.sort(nums) 方法進(jìn)行升序排列

int[] nums = new int[]{4, 1, 6, 3};

// 升序
Arrays.sort(nums);

具體來講,Arrays 類中的 sort 方法這樣寫道

Sorts the specified array of objects into ascending order, according to the natural ordering of its elements.
解釋: 根據(jù)指定數(shù)組元素的自然順序?qū)⒅付〝?shù)組的對象(數(shù)組中的元素)遞增排序

那么對于整數(shù)而言,就是按照升序排列

1.1.2 降序排列

那么如果我想降序排列呢?那么這種額外的“需求”就需要自定義一個(gè)比較器(Comparator),在定義完比較器后,可以由 Arrays.sort 重載函數(shù)實(shí)現(xiàn)這種額外的“需求”,下面是 Arrays.sort 重載函數(shù)

public static <T> void sort(T[] a, Comparator<? super T> c) {
	// ....
}

下面這段話是關(guān)于這個(gè)函數(shù)的解釋

Sorts the specified array of objects according to the order induced by the specified comparator
解釋: 排序的順序是通過指定的比較器(comparator)來推斷出來的,以此將數(shù)組的對象(數(shù)組中的元素)進(jìn)行排序

也就是說,這個(gè)函數(shù)要求我們自定義一個(gè)比較器(Comparator),通過引入 Comparator 接口,實(shí)現(xiàn)這個(gè)接口中的 compare 方法來告訴 Arrays.sort 函數(shù)如何排序

除此之外,我還應(yīng)注意到,這個(gè)函數(shù)使用了泛型 T,因?yàn)榉盒鸵蟀莸谋仨毷菍ο箢愋?,?int 是基本類型,所以第一個(gè)參數(shù) T[] a 中的 a 不能是基本類型 int[]

好在 Java 中存在基本類型的包裝類,例如: int 基本類型對應(yīng)著 Integer 包裝類,那么我們就通過如下方式,實(shí)現(xiàn) int 型數(shù)組的降序排列

int[] nums = new int[]{4, 1, 6, 3};

// 降序
Integer[] newNums = new Integer[nums.length];
for (int i = 0; i < nums.length; i++) newNums[i] = nums[i];

Arrays.sort(newNums, new Comparator<>(){
    @Override
    public int compare(Integer o1, Integer o2) {
        if (o1 > o2) return -1;// 若此處指定為1, 則為升序
        else if (o1 < o2) return 1;// 若此處指定為-1, 則為升序
        else return 0;
    }
});

關(guān)于為什么 compare 中 o1 > o2 時(shí)要返回 -1 是降序,我查詢了諸多資料都得不到一個(gè)確切的解釋。但是可以明確的是: 排序的順序是基于返回值的

在升序情況下,對于 compare(Integer o1, Integer o2) 函數(shù)

if (o1 > o2) return 1;	// 或其他正整數(shù)
else if (o1 < o2) return -1;	// 或其他負(fù)整數(shù)
else return 0;	// 兩者相等時(shí)

在降序情況下,對于 compare(Integer o1, Integer o2) 函數(shù)

if (o1 > o2) return -1;	// 或其他負(fù)整數(shù)
else if (o1 < o2) return 1;	// 或其他負(fù)整數(shù)
else return 0;	// 兩者相等時(shí)

對于 compareTo(Integer o2) 函數(shù)也有

o1.compareTo(o2);	// 升序
-o1.compareTo(o2);	// 降序

由于 Java 8 引入的 Lambda 表達(dá)式,Arrays.sort 可以簡化為

Arrays.sort(newNums, (Integer o1, Integer o2) -> {
        if (o1 > o2) return -1;
        else if (o1 < o2) return 1;
        else return 0;
});

// 我們還可以省略掉參數(shù)的類型
Arrays.sort(newNums, (o1, o2) -> {
        if (o1 > o2) return -1;
        else if (o1 < o2) return 1;
        else return 0;
});

// 當(dāng)然,我們還可以直接調(diào)用 Integer 包裝類中實(shí)現(xiàn)的 compareTo 方法(默認(rèn)是升序)
// 所需要在 o1.compareTo(o2) 前加負(fù)號
Arrays.sort(newNums, (o1, o2) -> -o1.compareTo(o2));

// 此外,我們還可以調(diào)用 Collections 類中的 reverseOrder 方法來實(shí)現(xiàn)逆序
Arrays.sort(newNums, Collections.reverseOrder());

至此,我們可以完成基本類型的降序排序

1.2 對象(自定義)類型

對象類型存在很多種,這里舉例 String 型數(shù)組

1.2.1 實(shí)現(xiàn) Comparable 接口中的 compareTo 函數(shù)

// Comparable 接口一般由自定類所實(shí)現(xiàn),例如有 Person 類,想以 age 升序排序 Person 對象
Class Person implements Comparable{
	int age;
	
	// ... 省略中間細(xì)節(jié)
	
	// 實(shí)現(xiàn)了 Comparable 接口中的 compareTo 方法
	@Override
    public int compareTo(Object o) {
        Person person = (Person)o;
        if (this.age > person.age) return 1;
        else if (this.age < person.age) return -1;
        else return 0;
    }
}

之后,便可以通過 Arrays.sort 以 age 升序排序 Person 對象

// 創(chuàng)建 Person 數(shù)組
Person[] persons = new Person[]{new Person(18), new Person(20)};
// 按照 age 升序排序 Person 對象
Arrays.sort(persons);

1.2.2 實(shí)現(xiàn) Comparator 接口中的 compare 函數(shù)

同基本類型降序排序部分大同小異,在此不作敘述文章來源地址http://www.zghlxwxcb.cn/news/detail-468244.html

到了這里,關(guān)于Java 中數(shù)組的排序(基本類型,對象類型)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 春眠不覺曉,Java數(shù)據(jù)類型知多少?基礎(chǔ)牢不牢看完本文就有數(shù)了

    春眠不覺曉,Java數(shù)據(jù)類型知多少?基礎(chǔ)牢不牢看完本文就有數(shù)了

    文編|JavaBuild 哈嘍,大家好呀!我是JavaBuild,以后可以喊我鳥哥!俺滴座右銘是不在沉默中爆發(fā),就在沉默中滅亡,一起加油學(xué)習(xí),珍惜現(xiàn)在來之不易的學(xué)習(xí)時(shí)光吧,等工作之后,你就會發(fā)現(xiàn),想學(xué)習(xí)真的需要擠時(shí)間,厚積薄發(fā)啦! 我們知道Java是面向?qū)ο蟮撵o態(tài)型編程語言,

    2024年02月02日
    瀏覽(19)
  • Java——一維數(shù)組和二維數(shù)組(主要詳講一維數(shù)組)

    目錄 一維數(shù)組 創(chuàng)建,初始化,賦值 注意 一些數(shù)組的便捷使用方法 使用 .length得到數(shù)組長度 Arrays相關(guān)的使用 二維數(shù)組 文章某些地方會出現(xiàn)java與c語言的比較 文章內(nèi)容參考韓順平老師的課堂筆記 可以先創(chuàng)建再初始化,也可以創(chuàng)建的時(shí)候直接初始化。但是,如果選擇先創(chuàng)建再

    2024年02月01日
    瀏覽(22)
  • Vue根據(jù)對象中的某個(gè)屬性來排序?qū)ο髷?shù)組【入門】

    Vue根據(jù)對象中的某個(gè)屬性來排序?qū)ο髷?shù)組【入門】

    要對對象數(shù)組按照其中某個(gè)屬性進(jìn)行排序,我們可以使用 JavaScript 的 sort() 方法,并傳入一個(gè)自定義的比較函數(shù)。在這個(gè)比較函數(shù)中,我們可以指定按照哪個(gè)屬性進(jìn)行排序。 假設(shè)有一個(gè)對象數(shù)組 items,其中每個(gè)對象都包含一個(gè) name 屬性和一個(gè) age 屬性,我們可以使用以下代碼

    2024年02月09日
    瀏覽(20)
  • vue數(shù)組對象中按某一字段排序

    vue數(shù)組對象中按某一字段排序

    給下列數(shù)組字段中的month排序 第一步:methods中寫一個(gè)方法如下: 第二步:將需要的數(shù)組調(diào)用此方法 最后就成了如下圖: 參考文章:https://www.jianshu.com/p/846b215a62de

    2024年02月11日
    瀏覽(24)
  • JS數(shù)組對象——中文按照首字母排序(分組)sort()、localeCompare()

    JS數(shù)組對象——中文按照首字母排序(分組)sort()、localeCompare()

    文章內(nèi)容 文章鏈接 JS數(shù)組對象—— 根據(jù)日期進(jìn)行排序 , 按照時(shí)間進(jìn)行升序或降序排序 https://blog.csdn.net/XSL_HR/article/details/128579840?spm=1001.2014.3001.5501 JS數(shù)組對象—— 英文按照首字母進(jìn)行排序 https://blog.csdn.net/XSL_HR/article/details/128579936?spm=1001.2014.3001.5501 排序在項(xiàng)目中非常實(shí)用,

    2024年02月03日
    瀏覽(45)
  • JS基本原理:對象類型賦值和原生類型賦值

    在本文中,我試圖以最簡潔的方式來闡明JavaScript編程原理中對象類型賦值和原生類型賦值之間的區(qū)別,以及它們各自是如何工作的。這也是我希望在我的JavaScript編程生涯早期就已經(jīng)理解的東西。 首先,讓我們回顧一下JavaScript中不同的原生類型和對象類型。 原生類型 :Boo

    2024年02月08日
    瀏覽(22)
  • JavaScript引用數(shù)據(jù)類型(對象類型)和原始(基本)數(shù)據(jù)類型特點(diǎn)比較

    JavaScript引用數(shù)據(jù)類型(對象類型)和原始(基本)數(shù)據(jù)類型特點(diǎn)比較

    為講解JavaScript引用數(shù)據(jù)類型(對象類型)和原始(基本)數(shù)據(jù)類型特點(diǎn)比較,需要先回顧JavaScript數(shù)據(jù)類型有哪些? 一)原始(primitive:原始、基本)數(shù)據(jù)類型,也稱為原始值(primitive value),包括: 1.布爾值(Boolean),其字面值只有兩個(gè),分別是true和false。 2.null,Null類型

    2024年02月05日
    瀏覽(17)
  • Net 高級調(diào)試之六:對象檢查之值類型、引用類型、數(shù)組和異常的轉(zhuǎn)儲

    Net 高級調(diào)試之六:對象檢查之值類型、引用類型、數(shù)組和異常的轉(zhuǎn)儲

    一、簡介 今天是《Net 高級調(diào)試》的第六篇文章。記得我剛接觸 Net 框架的時(shí)候,還是挺有信心的,對所謂的值類型和引用類型也能說出自己的見解,畢竟,自己一直在努力。當(dāng)然這些見解都是書本上的,并沒有做到眼見為實(shí),所以總是有些東西說不清楚。今天,我們就好好的

    2024年02月05日
    瀏覽(15)
  • 【JAVA】數(shù)據(jù)類型與變量(主要學(xué)習(xí)與c語言不同之處)

    【JAVA】數(shù)據(jù)類型與變量(主要學(xué)習(xí)與c語言不同之處)

    ?作者簡介:大家好,我是橘橙黃又青,一個(gè)想要與大家共同進(jìn)步的男人???? ??個(gè)人主頁:橘橙黃又青-CSDN博客 目標(biāo): 1. 字面常量 2. 數(shù)據(jù)類型 3. 變量 在上節(jié)課 HelloWorld 程序中, System.Out.println(\\\"Hello World\\\") ; 語句,不論程序何時(shí)運(yùn)行,輸出的都是 Hello World,其實(shí) \\\"Hello Wo

    2024年03月28日
    瀏覽(23)
  • JS數(shù)組對象——根據(jù)日期進(jìn)行排序Date.parse(),按照時(shí)間進(jìn)行升序或降序排序localeCompare()

    JS數(shù)組對象——根據(jù)日期進(jìn)行排序Date.parse(),按照時(shí)間進(jìn)行升序或降序排序localeCompare()

    排序在項(xiàng)目中非常實(shí)用,出現(xiàn)頻率極高,尤其是 后臺管理系統(tǒng) ,需要我們對大量的數(shù)據(jù)進(jìn)行 展示、處理、操作 。一般都是 從后臺獲取到數(shù)組對象 ,然后 根據(jù)其中的一個(gè)屬性對數(shù)據(jù)進(jìn)行升序或者降序 的處理。從本期文章開始,將分別介紹常用的三種排序—— 根據(jù)日期排序

    2024年02月01日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包