日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java的Arrays.sort()良心总结

發布時間:2025/3/20 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的Arrays.sort()良心总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言的stilib.h頭文件中有qsort(),C++的STL庫中有sort(),這些封裝好的排序函數讓我們避免了比賽手寫排序,給我們解題帶來了的便利。在Java的Arrays類中也封裝好了類似的方法sort()。
基本格式:

Arrays.sort(num);
Arrays.sort(num,c);
Arrays.sort(num,0,n);
Arrays.sort(num,0,n,c);

1.Arrays.sort(num);

這種格式的調用只能適用于數組在創建時就初始化的情況,默認將數組升序排序。

import java.util.*; public class Main {public static void main(String[] args) {int num[]=new int[] {1,9,2,6,0,8,1,7};Arrays.sort(num);for(int i=0;i<num.length;i++) {System.out.print(num[i]+" ");}} }

運行結果:

0 1 1 2 6 7 8 9

2.Arrays.sort(num,c);

但是如果只進行升序排序則不能滿足我們的比賽需求。如需降序排序,這種格式就派上用場了。類似C++的sort()函數的參數cmp函數,這里需要傳入實現了Comparator接口的類的對象c

這種重載形式的方法原型如下:

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

從函數原型中可以看出,我們的num數組的類型必須是基本類型(如int、char、double……)對應的類(如Integer、Character、Double……)的對象(而且數組必須在創建時就初始化)

對于實現了Comparator接口的類的對象c的寫法,如果只是對基本類型對應的類對象的排序,我個人比較推薦匿名內部類的寫法。

import java.util.*; public class P1478 {public static void main(String[] args) {Integer num[]=new Integer[] {1,9,2,6,0,8,1,7};//初始化Integer對象的數組Arrays.sort(num,new Comparator<Integer>() {public int compare(Integer a,Integer b) {return b-a;}});for(int i=0;i<num.length;i++) {System.out.print(num[i]+" ");}} }

運行結果:

9 8 7 6 2 1 1 0

3.Arrays.sort(num, fromIndex, toIndex);

和前面的格式相比,這種更為通用。它能運用在數組在運行過程初始化的情況,給下標在區間[fromIndex, toIndex)的元素排序

import java.util.*; public class Main {static final int maxn=100005;static int n;static int num[]=new int[maxn];public static void main(String[] args) {Scanner cin=new Scanner(System.in);n=cin.nextInt();for(int i=0;i<n;i++) {num[i]=cin.nextInt();}Arrays.sort(num, 0,n);for(int i=0;i<n;i++) {System.out.println(num[i]);}} }

輸入:

8
1 9 2 6 0 8 1 7

運行結果:

0 1 1 2 6 7 8 9

4.Arrays.sort(num,0,n,c);

  • 這種格式只是在第2種的基礎上加上了第3種,于是他們的特點也是相疊加的,這里就不多加贅述了。
  • 通常這種格式會被運用在我們C++中需要用上結構體排序的題目上,因為對于自定義的數據類型,排序時一定要寫cmp函數。Java中沒有結構體,所以我們只能類似寫結構體那樣定義類。(注意:如果定義的類寫在主類里面,就要加上static關鍵字,寫在外面則不用
  • 對于實現了Comparator接口的類的對象c的寫法,如果只要排序一次,我們還是可以寫匿名內部類。如果是多次排序的話,我們可以讓定義的類實現Comparator接口,寫把compare方法寫在定義的類里面。(最后例題的代碼就是這種寫法)
  • 要輸入定義的類對象的數據時,要先初始化該對象(例如下面的:num[i]=new People();)
import java.util.*; public class Main {static class People{String name;int age;}static final int maxn=100005;static int n;static People num[]=new People[maxn];public static void main(String[] args) {Scanner cin=new Scanner(System.in);n=cin.nextInt();for(int i=0;i<n;i++) {num[i]=new People(); //要記得先初始化num[i].name=cin.next();num[i].age=cin.nextInt();}Arrays.sort(num, 0, n,new Comparator<People>() {public int compare(People a, People b) {//return a.age-b.age; //按年齡升序排序return a.name.compareTo(b.name); //按名字升序排序}});for(int i=0;i<n;i++) {System.out.println(num[i].name+" "+num[i].age);}} }

實戰演練

不管怎么樣,剛學的東西還是要練練的。下面是來自洛谷的一道運用到結構體排序的題目,雖然比較簡單,但是也算是一種實戰吧。
傳送門

題目描述

又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有一個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。

這次與NOIp2005普及組第一題不同的是:陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在s<0之前最多能摘到多少個蘋果。

現在已知n個蘋果到達地上的高度xi,椅子的高度a,陶陶手伸直的最大長度b,陶陶所剩的力氣s,陶陶摘一個蘋果需要的力氣yi,求陶陶最多能摘到多少個蘋果。

輸入格式:

第1行:兩個數 蘋果數n,力氣s。

第2行:兩個數 椅子的高度a,陶陶手伸直的最大長度b。

第3行~第3+n-1行:每行兩個數 蘋果高度xi,摘這個蘋果需要的力氣yi。

輸出格式:

只有一個整數,表示陶陶最多能摘到的蘋果數。

輸入樣例#1:

8 15
20 130
120 3
150 2
110 7
180 1
50 8
200 0
140 3
120 2

輸出樣例#1:

4

說明

所有數據:n<=5000 a<=50 b<=200 s<=1000

分析

簡單的貪心法題目,只要把蘋果按按消耗的體力升序排序,然后只要能夠得著就去摘(計數器加一),當體力不足以摘蘋果或者遍歷了所有蘋果之后結束,最后輸出。
//貪心法的證明?我不會證明QAQ

代碼如下

import java.util.*; public class Main {static class Apple implements Comparator<Apple>{ //實現Comparator接口int cost,height;public int compare(Apple a,Apple b) {return a.cost-b.cost;}}static int n,s,ans;static int a,b;static Apple num[]=new Apple[5005];public static void main(String[] args) {Scanner cin=new Scanner(System.in);n=cin.nextInt();s=cin.nextInt();a=cin.nextInt();b=cin.nextInt();for(int i=0;i<n;i++) {num[i]=new Apple(); //不要忘記num[i].height=cin.nextInt();num[i].cost=cin.nextInt();}Arrays.sort(num,0,n, new Apple()); //觀察參數for(int i=0;i<n&&s>=num[i].cost;i++) {if(num[i].height<=a+b) {ans++;s-=num[i].cost;}}System.out.println(ans);}}

總結

以上是生活随笔為你收集整理的Java的Arrays.sort()良心总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。