java哈希表比较器问题
大家好,我从来没有写过比较器b4,我有一个真正的问题。我已经创建了一个哈希表
Hashtable <String, Objects> ht;
有人能告诉你如何为哈希表编写一个比较器吗?我见过的例子都是关于equals的,但我一点都不知道。下面的代码不是我的,而是我发现的一个示例,哈希表中的关键内容意味着我不能这样做
public class Comparator implements Comparable<Name> {
private final String firstName, lastName;
public void Name(String firstName, String lastName) {
if (firstName == null || lastName == null)
throw new NullPointerException();
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() { return firstName; }
public String lastName() { return lastName; }
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name)o;
return n.firstName.equals(firstName) &&
n.lastName.equals(lastName);
}
public int hashCode() {
return 31*firstName.hashCode() + lastName.hashCode();
}
public String toString() {
return firstName + " " + lastName;
}
public int compareTo(Name n) {
int lastCmp = lastName.compareTo(n.lastName);
return (lastCmp != 0 ? lastCmp :
firstName.compareTo(n.firstName));
}
}
# 1 楼答案
比较器会告诉你两个项目中哪个更大。如果这对你的哈希表有意义,只有你才能说出它的意义。以这种方式比较两个哈希表是非常不寻常的
# 2 楼答案
比较器用于对列表进行排序。A
Hashtable
(注意大小写)不是按元素排序的。您可以通过迭代表的键来对表进行排序(我想,如果您想对表的键进行排序的话),然后将它们放在List
中。接下来要做的事情是对List
进行排序,并在List
上迭代,然后从Hashtable
中使用一个get
来获得它的关联值下面是一个例子(使用
HashMap
,因为它与其他Java集合更为集成。AHashMap
基本上与Hashtable
相同):列表
keys
的顺序按匿名Comparator
类排序。它将按字母顺序排序,这是字符串的默认值。你可以使用你自己的关键对象,就像你提到的。如果没有在这个key对象中实现Comparator
,那么可以提供,如上面的示例所示。否则,您可以通过调用以下命令使用默认Comparator
:它将使用
Comparator
的类实现。如果它没有实现Comparator
,那么它将抛出一个异常(因为它将强制转换为Comparator
)