關(guān)于Arrays.sort()使用的注意事項(xiàng)
Arrays.sort()使用注意事項(xiàng)
Java中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
int
:是基本數(shù)據(jù)類型,Integer 是引用數(shù)據(jù)類型Ingeter
:是 int 的包裝類,int 的初值為 0,Ingeter的初值為null。
初始化
int num = 1; Integer num = new Integer(1);
有了自動裝箱和拆箱,使得對Integer類也可使用:Integer num = 1;
自動裝箱和拆箱
從Java5.0版本以后加入了autoboxing功能;自動“拆箱”和“裝箱”是依靠JDK5的編譯器在編譯期的“預(yù)處理工作”。
自動裝箱:將基本數(shù)據(jù)類型封裝為對象類型,成為一個對象以后就可以調(diào)用對象所聲明的所有的方法。
Arrays.sort()平時(shí)經(jīng)常用到:有兩種方式
第一種:將數(shù)組元素倒序
Arrays.sort(array,Collections.reverseOrder());
array 必須為 包裝類對象
第二種:將數(shù)組元素升序or降序
1.重寫比較器 默認(rèn)是升序
List itemArrays.sort(y,new Comparator<Integer>(){ ?? ?@Override ?? ?public int compare(Integer o1, Integer o2) { ?? ??? ?return o2-o1; ?// 反過來是升序 ?? ?} });
2.使用lambada表達(dá)式進(jìn)行代碼簡化
Arrays.sort(array, (o1, o2) -> o2-o1);
在實(shí)際應(yīng)用中我們往往使用 基本數(shù)據(jù)類型 數(shù)組,這時(shí)候若使用sort() 就需要將基本數(shù)據(jù)類型轉(zhuǎn)化為引用數(shù)據(jù)類型,否則便會報(bào)錯
sort() 方法源碼:
public static <T> void sort(T[] a, Comparator<? super T> c) { ? ?... ?}
因此需要將 int[] 類型數(shù)組包裝為 Integer[] 數(shù)組
// int數(shù)組轉(zhuǎn)為Integer // 將int數(shù)組轉(zhuǎn)換為Integer數(shù)組 ?int[] nums = {1,2,3}; ?// 先將int數(shù)組轉(zhuǎn)換為數(shù)值流 ?IntStream stream = Arrays.stream(nums); ?// 流中的元素全部裝箱,轉(zhuǎn)換為流 ---->int轉(zhuǎn)為Integer ?Stream<Integer> integerStream = stream.boxed(); ?// 將流轉(zhuǎn)換為數(shù)組 ?Integer[] integers = integerStream.toArray(Integer[]::new);
最后排序完,需要轉(zhuǎn)化回int[]數(shù)組
Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();
Arrays.sort()降序排列問題
今天對int[ ]使用Arrays.sort()時(shí)想使用降序排列,上網(wǎng)一搜都是
Arrays.sort(int[ ], Collections.reverseOrder());
經(jīng)過使用發(fā)現(xiàn),并不能使用。
int[] a={5,7,2,6,8,1,4}; Arrays.sort(a);//a: 1 2 4 5 6 7 8 Arrays.sort(a, Collections.reverseOrder);//報(bào)錯
后來經(jīng)過搜索研究發(fā)現(xiàn),此方法支持Object對象
Arrays.sort(Object[ ], Collections.reverseOrder());
Object[] a={5,7,2,6,8,1,4}; Arrays.sort(a);//a: 1 2 4 5 6 7 8 Arrays.sort(a, Collections.reverseOrder());//成功
也可以使用再新建一個同樣大小數(shù)組,從后往前一一賦值
int[] a = {5, 7, 2, 6, 8, 1, 4}; Arrays.sort(a);//a: 1 2 4 5 6 7 8 int[] b = new int[a.length]; for(int i = 0; i < a.length; i++) {//b: 8 7 6 5 4 2 1 ?? ?b[i] = a[a.length - i - 1]; }
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中回調(diào)函數(shù)?(callback)?及其實(shí)際應(yīng)用場景
在Java中回調(diào)函數(shù)(Callback)是一種常見的設(shè)計(jì)模式,用于實(shí)現(xiàn)異步操作或事件處理,這篇文章主要給大家介紹了關(guān)于Java中回調(diào)函數(shù)?(callback)?及其實(shí)際應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下2024-02-02關(guān)于Java中String創(chuàng)建的字符串對象內(nèi)存分配測試問題
這篇文章主要介紹了Java中String創(chuàng)建的字符串對象內(nèi)存分配測試,給大家詳細(xì)介紹了在創(chuàng)建String對象的兩種常用方法比較,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07基于ThreadLocal 的用法及內(nèi)存泄露(內(nèi)存溢出)
這篇文章主要介紹了基于ThreadLocal 的用法及內(nèi)存泄露(內(nèi)存溢出),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java中JDBC實(shí)現(xiàn)往MySQL插入百萬級數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了java中JDBC實(shí)現(xiàn)往MySQL插入百萬級數(shù)據(jù)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼
這篇文章主要介紹了以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Java正則驗(yàn)證正整數(shù)的方法分析【測試可用】
這篇文章主要介紹了Java正則驗(yàn)證正整數(shù)的方法,結(jié)合實(shí)例形式對比分析了java針對正整數(shù)的驗(yàn)證方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08