Arraylist
只是一个小问题。我想按名称对ArrayList<Client>
进行排序。
Class Client{ String name; int phonenumber ..}
这段代码完成了工作,但我有一个编译器警告:“使用未经检查或不安全的操作”。问题是什么?
public void sortByName(){
Collections.sort(ListofClients, new NameComparator());
}
我的比较器看起来像这样:
public class NameComparator implements Comparator{
public int compare(Object client1, Object client) {
String name1 = ((Client) client1).getName();
String name2 = ((Client) client2).getName();
return name1.toUpperCase()).compareTo(name2.toUpperCase();
}
}
如果我使用“implements Comparator<Client>
”我会收到错误:“NameComparator不是抽象的,并且不会覆盖java.util.Comparator中的抽象方法比较(客户端,客户端)。我的比较器是错误的吗?对不起这个noob问题,java新手
答案 0 :(得分:12)
在您implement Comparator<Client>
之后,您需要更改:
public int compare(Object client1, Object client)
{
...
}
到这个
public int compare(Client client1, Client client)
{
// Now you don't have to cast your objects!
}
这都是因为比较器的定义
public interface Comparator<T>
{
public compare(T o1, T o2);
}
注意泛型参数T如何显示在方法名称中。
像Eclipse / Netbeans / IntelliJ这样的IDE会在这种情况下提供帮助。
答案 1 :(得分:3)
我认为您的客户列表属于
类型List<Client>
在这种情况下,您的比较器应该是Comparator<Client>
类型,并执行适当的比较(在这种情况下按名称)