构造函数接受两个数组,我想将它们放入我的HashMap中,但是如果地图已经包含来自其中一个数组的单词,那么我想抛出一个异常。除非重复术语是数组术语中的最后一个术语,否则此方法有效。为什么会这样呢?
private HashMap<String, Double> wordToWgt = new HashMap<String, Double>();
private TST t = new TST();
double maxWeight = 0.0;
private String maxWord = "";
public Autocomplete(String[] terms, double[] weights) {
if (terms.length != weights.length) {
throw new IllegalArgumentException();
}
else {
for (int i = 0; i < terms.length; i++) {
if (weights[i] < 0) {
throw new IllegalArgumentException();
}
else if (wordToWgt.containsKey(terms[i])) {
throw new IllegalArgumentException();
}
else if (weights[i] > maxWeight) {
maxWeight = weights[i];
maxWord = terms[i];
}
t.insert(terms[i], weights[i]);
wordToWgt.put(terms[i], weights[i]);
}
}
// System.out.println(wordToWgt.keySet());
}
最佳答案
我看不到您的代码有什么问题,因此,我将提出一些替代解释。
您(我想)使用的输出
System.out.println(wordToWgt.keySet());
告诉您有重复项。但是,
keySet
返回的密钥集是真实的集(在String.equals
语义的上下文中)。因此,不能重复。因此,您看到的重复项实际上是...根本不是重复项。那怎么可能?
其中一个字符串上可能有前导或尾随空格字符。这很容易错过。
这可能是一个homoglyph问题。
也可能是您/您的工具链没有正确地重建代码。即您正在运行的代码可能与您正在查看/编辑的源代码不匹配。
附言您仅在最后一个元素上看到了这一事实,这可能只是一个巧合,或者可能是生成输入字符串的方式的伪影。