2013-08-05 29 views
-1

我有一個很大的疑問,例如我有一個名稱和一個值可能是相同的不同名稱的列表,當我做一個compareTo它會返回列表順序號碼。但我的問題是,如果我執行的應用程序,以同一列表的計算機,將返回相同的列表?可以返回一個compareTo在不同情況下的不同結果

取決於您要執行的計算機嗎?

我知道,解決方案如果要實現一個compareTo除了執行命令,還要使用其他參數,但是我希望如果在任何情況下使用同一個列表返回列表,它將會不同。

+0

你到目前爲止嘗試了什麼?請舉一個例子 –

+0

這只是一個問題,它如何工作compareTo內部,我不知道是否compareTo按位置工作或如果使用另一種方式來做比較 – Deckard27

+0

我想OP想知道如果'compareTo()'說某些對象是相同的,它們的順序在程序的不同運行中是否保持不變。 –

回答

2

我不確定我是否理解你的問題。 在兩個項目具有相同值的情況下,compareTo將返回0(在這種情況下,因爲此「數字」是相同的)。這個函數compareTo只定義了算法應該對這些項目進行排序的順序,並且由排序算法來決定哪個排在第一位。如果使用相同的算法,使用完全相同的列表,則輸出應該相同,至少對於大多數常見算法來說,因爲它們不是隨機的。但是,如果您更改列表或算法,結果可能會完全不同。

因此,爲避免這種情況,您可以重新實現comapreTo函數以比較第二個值,以防第一個值相同。例如,如果你有2號:N1和匹配兩個字符串S1和S2 N2,你應該做的:

int comparison = n1.compareTo(n2); 
if (comparison == 0){ 
    return s1.compareTo (s2)); 
} 

當然,你仍然有問題,當兩個N1 N2 == S1和S2 == 。但是,也許這不是一個問題,因爲如果所有的數據都是相同的,那麼這些對象是等價的,對吧? ;)

我希望它有幫助

相關問題