2013-02-28 130 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