我有一個類'CoAutoria',它包含了一個'作者'類(現在只有一個名稱)和這些作者共同擁有的文章數。
爲了找出合作作者前10名(關於文章數量),我創建了一個'CoAutoria'的TreeSet,用於保存每對文章的總數。 我需要循環瀏覽多年的地圖,收集不同的作者和他們各自的一組作者。然後,爲每一對創建一個'CoAutoria'實例,並將其添加到樹集(如果它不存在);或者簡單地將它的文章數量與文章中現有的文章數量相加。包含給出錯誤的結果
我已經創建了compareTo方法,將它插入到treeset中,並創建了equals方法,以便作者的順序無關緊要。
這裏的主要代碼:`
public class CoAutoria implements Comparable<CoAutoria>
{
private Autor autor1;
private Autor autor2;
private int artigosComum;
(...)
}
@Override
public int compareTo(CoAutoria a2)
{
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = a2.getAutor1().getNome();
String caAutor2 = a2.getAutor2().getNome();
if((autor1.equals(a2.getAutor1()) && autor2.equals(a2.getAutor2())) || (autor1.equals(a2.getAutor2()) && autor2.equals(a2.getAutor1())))
{
return 0;
}
else
{
return 1;
}
}
@Override
public boolean equals(Object o)
{
if(this == o)
{
return true;
}
if(o == null || o.getClass() != this.getClass())
return false;
CoAutoria ca = (CoAutoria) o;
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = ca.getAutor1().getNome();
String caAutor2 = ca.getAutor2().getNome();
if((thisAutor1.equals(caAutor1) && thisAutor2.equals(caAutor2)) || (thisAutor1.equals(caAutor2) && thisAutor2.equals(caAutor1)))
{
return true;
}
else
{
return false;
}
}
的主要問題是:當我檢查組已經擁有的「CoAutoria」一定的情況下,(我使用TreeSet中的contains()方法),它給了我錯誤的結果......有時它會正確檢查Pair AB已經存在於該集合中(以BA的形式),但有時它不會......對於我讀過的內容,等號的方法,所以這不適用於發生......對吧?
[編輯:] 由於第一篇文章,我開始想,也許這個問題上居住的compareTo..So我把它改成
public int compareTo(CoAutoria a2)
{
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = a2.getAutor1().getNome();
String caAutor2 = a2.getAutor2().getNome();
if(this.equals(a2))
{
System.out.println("return 0");
return 0;
}
else
{
int aux = thisAutor1.compareTo(caAutor1);
if(aux != 0)
{
return aux;
}
else
{
return thisAutor2.compareTo(caAutor2);
}
}
}
但它仍然給我的壞結果..我想我現在想出了它:如果它是相同的'CoAutoria',我返回0,如果不是我通過名稱,並命令它的compareTo值..但缺少一些東西
在您的示例中沒有足夠的內容,但是....不是使用contains,而是使用equals循環,您可能會發現使用equals()進行測試也不起作用。 –
@DariusX。問題不在於他的平等,而在於「compareTo」函數。當compareTo函數無法正常工作時,對有序集合的'contains'方法也不會。 – greedybuddha