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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arrays.sort()用来自定义排序的使用

發布時間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arrays.sort()用来自定义排序的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

compareTo方法

`public int compareTo(String anotherString)`

按字典順序比較兩個字符串。該比較基于字符串中各個字符的 Unicode 值。按字典順序將此 String 對象表示的字符序列與參數字符串所表示的字符序列進行比較。如果按字典順序此 String 對象位于參數字符串之前,則比較結果為一個負整數。如果按字典順序此 String 對象位于參數字符串之后,則比較結果為一個正整數。如果這兩個字符串相等,則結果為 0;compareTo 只在方法 equals(Object) 返回 true 時才返回 0。
這是字典排序的定義。如果這兩個字符串不同,那么它們要么在某個索引處的字符不同(該索引對二者均為有效索引),要么長度不同,或者同時具備這兩種情況。如果它們在一個或多個索引位置上的字符不同,假設 k 是這類索引的最小值;則在位置 k 上具有較小值的那個字符串(使用 < 運算符確定),其字典順序在其他字符串之前。在這種情況下,compareTo 返回這兩個字符串在位置 k 處兩個char 值的差,即值:

this.charAt(k)-anotherString.charAt(k)
如果沒有字符不同的索引位置,則較短字符串的字典順序在較長字符串之前。在這種情況下,compareTo 返回這兩個字符串長度的差,即值:
this.length()-anotherString.length()

指定者:
接口 Comparable 中的 compareTo
參數:
anotherString - 要比較的 String。
返回:
如果參數字符串等于此字符串,則返回值 0;如果此字符串按字典順序小于字符串參數,則返回一個小于 0 的值;如果此字符串按字典順序大于字符串參數,則返回一個大于 0 的值

package com.tjrac_java_2;import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; class People{int age;String name;public People(String name,int age){this.name=name;this.age=age;}public int getAge() {return age;}public String getName() {return name;} } class rule implements Comparator<String>{@Overridepublic int compare(String o1, String o2) { /* if(o1.compareTo(o2)<0){return 1;}else{return 0;}*/return o1.compareTo(o2);}} public class ReSort {public static void main(String[] args) {People p = new People("魏杰",22);People p1 = new People("宋光來",21);People p2 = new People("楊",23);People [] s=new People[3];s[0]=p;s[1]=p1;s[2]=p2;Arrays.sort(s,new Comparator<People>(){@Overridepublic int compare(People o1, People o2) { // if(o1.age>=o2.age){ // return 1; // } // else { // return 0; // }return o1.age-o2.age;}});System.out.println("---------------------------");for (People pp : s) {System.out.println(pp.name+"->"+pp.getAge());}String[] str ={"一","一一一一","一一一","一"};Arrays.sort(str,new rule());for (String string : str) {System.out.println(string);}} }

comparator接口與Comparable接口的區別

  • Comparator 和 Comparable 相同的地方
  • 他們都是java的一個接口, 并且是用來對自定義的class比較大小的,

    什么是自定義class: 如 public class Person{ String name; int age }.

    當我們有這么一個personList,里面包含了person1, person2, persion3…, 我們用Collections.sort( personList ),
    是得不到預期的結果的. 這時肯定有人要問, 那為什么可以排序一個字符串list呢:

    如 StringList{“hello1” , “hello3” , “hello2”}, Collections.sort( stringList ) 能夠得到正確的排序, 那是因為
    String 這個對象已經幫我們實現了 Comparable接口 , 所以我們的 Person 如果想排序, 也要實現一個比較器。

    Comparator 和 Comparable 的區別

    Comparable

    Comparable 定義在 Person類的內部:

    public class Persion implements Comparable {…比較Person的大小…},

    因為已經實現了比較器,那么我們的Person現在是一個可以比較大小的對象了,它的比較功能和String完全一樣,可以隨時隨地的拿來
    比較大小,因為Person現在自身就是有大小之分的。Collections.sort(personList)可以得到正確的結果。

    Comparator

    Comparator 是定義在Person的外部的, 此時我們的Person類的結構不需要有任何變化,如

    public class Person{ String name; int age },

    然后我們另外定義一個比較器:

    public PersonComparator implements Comparator() {…比較Person的大小…},

    在PersonComparator里面實現了怎么比較兩個Person的大小. 所以,用這種方法,當我們要對一個 personList進行排序的時候,
    我們除了了要傳遞personList過去, 還需要把PersonComparator傳遞過去,因為怎么比較Person的大小是在PersonComparator
    里面實現的, 如:

    Collections.sort( personList , new PersonComparator() ).

  • Comparator 和 Comparable 的實例
  • Comparable:

    實現Comparable接口要覆蓋compareTo方法, 在compareTo方法里面實現比較:
    public class Person implements Comparable {
    String name;
    int age
    public int compareTo(Person another) {
    int i = 0;
    i = name.compareTo(another.name); // 使用字符串的比較
    if(i == 0) { // 如果名字一樣,比較年齡, 返回比較年齡結果
    return age - another.age;
    } else {
    return i; // 名字不一樣, 返回比較名字的結果.
    }
    }
    }
    這時我們可以直接用 Collections.sort( personList ) 對其排序了.

    Comparator:

    實現Comparator需要覆蓋 compare 方法:
    public class Person{
    String name;
    int age
    }

    class PersonComparator implements Comparator {
    public int compare(Person one, Person another) {
    int i = 0;
    i = one.name.compareTo(another.name); // 使用字符串的比較
    if(i == 0) { // 如果名字一樣,比較年齡,返回比較年齡結果
    return one.age - another.age;
    } else {
    return i; // 名字不一樣, 返回比較名字的結果.
    }
    }
    }
    Collections.sort( personList , new PersonComparator()) 可以對其排序

    4:總結

    兩種方法各有優劣, 用Comparable 簡單, 只要實現Comparable 接口的對象直接就成為一個可以比較的對象,
    但是需要修改源代碼, 用Comparator 的好處是不需要修改源代碼, 而是另外實現一個比較器, 當某個自定義
    的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了, 并且在Comparator 里面用戶可以自
    己實現復雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節省很多重復勞動了。
    引用:https://www.cnblogs.com/sunflower627/p/3158042.html

    總結

    以上是生活随笔為你收集整理的Arrays.sort()用来自定义排序的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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