2013-02-28 69 views
3

如果我有一個arrayList(爲簡單起見),其中包含A,B,C比較一個ArrayList本身

,我想對自己這些值,而不比較任何東西本身沒有比較兩次相同的兩個值進行比較...

我該怎麼做?

現在我有以下

for(Double db : arrayList) 
{ 
    for(Double db2 : arrayList) 
    { 
     if(db2 != db) 
     { 
      //compare 
     } 
    } 
} 

但這並不排除其中第一個A相比B和後來B被相對於A ...

任何想法的情況下?

在此先感謝..

回答

6

這聽起來像你可能只是想指數而不是去:

for (int i = 0; i < arrayList.size() - 1; i++) { 
    Double db = arrayList.get(i); 
    for (int j = i + 1; j < arrayList.size(); j++) { 
     Double db2 = arrayList.get(j); 

     // Don't use == unless you *really* want reference identity 
     if (!db2.equals(db)) { 
      ... 
     } 
    } 
} 
2

使用subList(int fromIndex, int toIndex)

List<Double> arrayList = ...; 
int length = arrayList.size(); 

for(int i = 0; i < length - 1; i++) 
{ 
    Double db1 = arrayList.get(i); 
    for(Double db2 : arrayList.subList(i + 1, length)) 
    { 
     // ... 
    } 
} 
+0

請注意,您可以使因爲最後一個元素沒有任何要比較的東西,所以在這裏爲'i'少一個。 (該子列表將爲空) – 2013-02-28 20:18:36

+0

@JonSkeet arrayList.subList(length,length)不返回一個空列表,因此它不會進入內部循環嗎? – 2013-02-28 20:22:15

+0

是的,但我的觀點是,你知道*它會這樣做 - 爲什麼即使進入* outer *循環,獲取最後一個元素,然後創建空的子列表(視圖)? – 2013-02-28 20:24:38