我正在构建简单的电话簿。因此,一个已经创建了一个类“人”:Vector.indexOf不适用于我的班级
public class Person implements Comparable<Person> {
String Name;
String number;
public Person(String name,String Num) {
Name=name;
number=Num;
}
public String getNumber() {
return number;
}
public String getName() {
return Name;
}
@Override
public int compareTo(Person another) {
return Name.compareTo(another.getName());
}
@Override
public String toString() {
return Name;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person) && !(obj instanceof String))
{
return false;
}
else
{
if(obj instanceof Person)
return Name.toLowerCase().equals(((Person)obj).getName().toLowerCase());
else
return Name.toLowerCase().equals(((String)obj).toLowerCase());
}
}
@Override
public int hashCode() {
return Name.hashCode();
} }
在我创建一个矢量程序的其它部分,以“人”对象来填充它,但是当我试图寻找一个人使用vctPerson.indexOf("John")
NAME我总是得到-1作为结果(未找到)。我的代码有什么问题?我已经实现了自定义的“等于”应该与字符串,并根据文档,“indexOf”使用“等于”比较对象...
编辑:我知道,我应该搜索后,电话号码,而不是名称但它无关这个例子
但是,如果我想按姓名或电话号码对电话簿进行分类,该怎么办?:) – guest86
然后两个'SortedMap'会更好:第一个包含所有(Name,Person)对,第二个包含(Number,Person)对。通过这种方式,您始终可以使用这两个键进行搜索,并且您可以使用任一排序方法打印列表,而无需手动排序。 'SortedMap'的合适实现是'TreeMap'。每个“TreeMap”需要一个“比较器”来决定排序顺序。 –