第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么當(dāng) Comparator.compare 相等時(shí)我們需要返回 0

為什么當(dāng) Comparator.compare 相等時(shí)我們需要返回 0

ABOUTYOU 2023-09-27 17:11:56
我知道當(dāng)實(shí)現(xiàn)Comparator接口的compare方法時(shí)我們需要返回如果 o1 > o2,+1-1 如果 o1 < o20 如果 o1 == o2我的問題是為什么當(dāng)兩者相等時(shí)我們需要返回 0?用例是什么或在哪里使用?如果我們考慮當(dāng)o2大于o1或o2等于o1時(shí)排序不會(huì)改變它的位置。誰能來解釋一下實(shí)際用例嗎?Java 文檔說比較其兩個(gè)參數(shù)的順序。當(dāng)?shù)谝粋€(gè)參數(shù)小于、等于或大于第二個(gè)參數(shù)時(shí),返回負(fù)整數(shù)、零或正整數(shù)。這是否意味著 return -1 或 return 0 具有相同的影響?零或正整數(shù) @Override    public int compare(Test f1, Test f2) {        if (f1.getId() > f2.getId()) {            return 1;        } else if (f1.getId() < f2.getId()) {            return -1;        } else {            return 0;        }    }
查看完整描述

3 回答

?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

當(dāng)您排序時(shí),-1和0本質(zhì)上對排序列表的排序有非常相似的影響,因?yàn)樵u估compareTo為 0 的項(xiàng)目將被分組在一起。


您“實(shí)際上”會(huì)在其他場景中使用此比較,例如您可能不想將復(fù)雜對象重復(fù)添加到列表中(是的,您也可以通過使用 a 來實(shí)現(xiàn)此場景)set。


假設(shè)我們有一個(gè)對象Book如下:


import java.util.Comparator;


public class Book implements Comparable {


  String isbn;

  String title;


  public Book(String id, String title) {

    this.isbn = id;

    this.title = title;

  }


  String getIsbn() {

    return isbn;

  }


  String getTitle() {

    return title;

  }


  @Override

  public int compareTo(Object o) {

    return Comparator

            .comparing(Book::getIsbn)

            .thenComparing(Book::getTitle)

            .compare(this, (Book) o);

  }


  @Override

  public  String toString() {

    String output = new StringBuilder()

            .append(isbn).append(":").append(title)

            .toString();

    return output;

  }

}

在這里,我們重寫了compareToof book 以創(chuàng)建自定義比較,首先檢查書籍的 isbn,然后檢查其標(biāo)題。


假設(shè)(例如)您有一個(gè)圖書館,里面有書籍。您可能想阻止您的用戶在該圖書館中添加重復(fù)的書籍......


public class Library {


  public static void main(String [] args) {

    List<Book> library = new ArrayList<>();

    library.add(new Book("9780593098240", "Children of Dune"));

    library.add(new Book("9780593098233", "Dune Messiah"));

    library.add(new Book("9780441172719", "Dune"));

    // Just to show the sorting, based on multiple attributes.

    Collections.sort(library);

    System.out.println("Books in library: " + Arrays.toString(library.toArray()));


    // You would obviously have some code for entering a book here, but easier to just create the object for an example. 

    Book newBook = new Book("9780593098240", "Children of Dune");

    for (Book bookInLibrary : library) {

        if (bookInLibrary.compareTo(newBook) == 0) {

            System.out.println("We already have that book in the library.");

            break;

        }

    }

  }

}


查看完整回答
反對 回復(fù) 2023-09-27
?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果當(dāng)比較的兩個(gè)值相等時(shí)返回 -1,compare(f1,f2)并且compare(f2,f1)都將返回-1。這意味著元素的順序?qū)⒉灰恢?。它可能?huì)破壞一些排序算法。

這就是為什么總合同compare要求:

sign(compare(f1,f2)) = -sign(compare(f2,f1))

這意味著當(dāng)兩個(gè)值相等時(shí)必須返回 0。


查看完整回答
反對 回復(fù) 2023-09-27
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以考慮具有以下實(shí)現(xiàn)的二分搜索算法:

function binary_search(A, n, T):

? ? L := 0

? ? R := n ? 1

? ? while L <= R:

? ? ? ? m := floor((L + R) / 2)

? ? ? ? if A[m] < T:

? ? ? ? ? ? L := m + 1

? ? ? ? else if A[m] > T:

? ? ? ? ? ? R := m - 1

? ? ? ? else:

? ? ? ? ? ? return m

? ? return unsuccessful

假設(shè)有一個(gè)Comapator對于相等和更少的情況返回相同的值:


public int compare(Test f1, Test f2) {

? ? ? ? if (f1.getId() > f2.getId()) {

? ? ? ? ? ? return 1;

? ? ? ? } else {

? ? ? ? ? ? return -1;?

}

現(xiàn)在A[m] < T或A[m].compareTo(T) < 0,將是true當(dāng)T等于A[m]和當(dāng)A[m]小于時(shí)T。


所以在這種情況下:


1 2 3 4 // array and A[m] is 2

2 // target T

2.compareTo(2)返回-1使得算法進(jìn)入下一次執(zhí)行L = m + 1 -> 而不是返回正確的值。


事實(shí)上,二分查找會(huì)陷入不定式循環(huán),從 2.compareTo(2)and跳轉(zhuǎn)3.compareTo(2)。我希望這有幫助。


查看完整回答
反對 回復(fù) 2023-09-27
  • 3 回答
  • 0 關(guān)注
  • 328 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號