我正在學習Java並想對包含對象的數組進行排序。要做到這一點,我想使用Comparable。我一直遇到一個編譯錯誤,似乎指出我沒有實現compareTo(我做過)或者比較器有問題(我現在不想使用它)。我在下面列出的一個小程序中隔離了這個問題。任何幫助非常感謝,因爲我花了幾個小時在網上搜索。Comparable接口如何工作?
我已經註釋掉了一些main的代碼,因爲我真正想要做的是創建一個帶有接口對象的數組並使用Comparable進行排序。我不確定這是否可行,所以我現在正在測試排序類。
package comp_test;
import java.util.ArrayList;
import java.util.List;
public class program {
public static void main(String[] args)
{
List<root> container = new ArrayList<root>();
container.add (new A ("Een"));
// container.add (new AA ("twee"));
container.add (new B ("drie"));
// container.add (new AA ("vier"));
container.add (new A ("en Vijf"));
for (root r: container)
{
r.show();
} // for
List.sort (container); // <=== error
// The method sort(Comparator) in the type List is not
// applicable for the arguments (List<root>
}
/*
public static void main(String[] args)
{
List<Itf> container = new ArrayList<Itf>();
container.add (new A ("Een"));
container.add (new AA ("twee"));
container.add (new B ("drie"));
container.add (new AA ("vier"));
container.add (new A ("en Vijf"));
for (Itf i: container)
{
i.show();
} // for
container.sort();
}
*/
}
--------------
package comp_test;
public interface Itf
{
public void show();
}
---------------
package comp_test;
abstract public class root implements Itf, Comparable<root>
{
abstract public void show();
abstract public String getID();
@Override
public int compareTo (root other)
{
return this.getID().compareTo (other.getID());
} /*** compareTo ***/
}
------------------
package comp_test;
public class A extends root
{
private String ID;
public A (String id)
{
this.ID = id;
} /*** A ***/
public String getID()
{
return ID;
} /*** getID ***/
@Override
public void show()
{
System.out.println ("A (" + getID() + "): " + super.toString());
} /*** show ***/
}
------------------
package comp_test;
public class B extends root
{
private String Name;
public B (String id)
{
this.Name = id;
} /*** B ***/
@Override
public String getID()
{
return Name;
} /*** getID ***/
@Override
public void show()
{
System.out.println ("B (" + Name + "): " + super.toString());
} /*** show ***/
}
請將您的代碼編輯爲演示問題的最小*示例(因此沒有評論代碼),並確保您指定了正確的錯誤。 –
您想改爲使用'Collections.sort(container)'。 –
請考慮遵循格式化代碼的一些約定。例如首字母大寫的類名,函數名和第一個paren之間沒有空格。 – bhspencer