是的,您可以将ArrayList
作为哈希映射中的键,但这是一个非常糟糕的主意,因为它们是mutable 。
如果您以任何方式(或其任何元素)更改ArrayList
,则映射将基本丢失,因为键的hashCode
与插入时的哈希码不同。
经验法则是仅将不可变数据类型用作哈希图中的键。正如Alex Stybaev所建议的那样,您可能想要创建一个Bigram
类,如下所示:
final class Bigram {
private final String word1, word2;
public Bigram(String word1, String word2) {
this.word1 = word1;
this.word2 = word2;
}
public String getWord1() {
return word1;
}
public String getWord2() {
return word2;
}
@Override
public int hashCode() {
return word1.hashCode() ^ word2.hashCode();
}
@Override
public boolean equals(Object obj) {
return (obj instanceof Bigram) && ((Bigram) obj).word1.equals(word1)
&& ((Bigram) obj).word2.equals(word2);
}
}
0
是否可以添加
ArrayList
作为HashMap
的键。我想保持二元组的频率计数。双字是关键,值是它的频率。对于像“他是”这样的每个二元组,我为其创建一个
ArrayList
并将其插入到HashMap
。但是我没有得到正确的输出。