【发布时间】:2016-11-02 14:13:47
【问题描述】:
我正在尝试使用 HashSet 来确保我从 .txt 文件中读取的数据是唯一的。
以下是样本数据;
999990 bummer
999990 bummer
999990 bummer
999990 bummer
99999 bummer
999990 bummerr
使用 Java.io.File 和 Java.util.Scanner 读取并存储为 Term 对象;
阅读术语;
while (rawTerms.hasNextLine()){
String[] tokens = rawTerms.nextLine().trim().split(delimiter);
if (tokens.length == 2) {
uniqueSet.add(new Term(Double.parseDouble(tokens[0]), tokens[1])); //add the term to set
}
else {
rawTerms.close();
throw new Exception("Invalid member length: "+ tokens.length);
}
}
allTerms = new ArrayList<>(uniqueSet); //Covert set into an ArrayList
使用 Guava 的术语类;
public Term(double weight, String theTerm){
this.weight = weight;
this.theTerm = theTerm;
}
@Override
public boolean equals(final Object obj) {
if (obj instanceof Term){
final Term other = (Term) obj;
return Objects.equal(this.weight, other.weight)
&& Objects.equal(this.theTerm, other.theTerm);
}
else {
return false;
}
}
@Override
public String toString(){
return toStringHelper(this).addValue(weight)
.addValue(theTerm).toString();
}
@Override
public int hashCode() {
return Objects.hashCode(this.weight, this.theTerm);
}
但是,当我运行测试以检查存储条目的数组的大小时,我得到了 3 个条目,而不是我想要的 1 个。我希望任何与之前添加的条目具有相同权重或术语的新条目都被视为重复条目。
感谢所有帮助!
马特
【问题讨论】:
-
什么是
uniqueSet? -
您的格式非常...不稳定。发布前请在 IDE 中自动格式化;并确保您的格式是一致的。另请注意,Java 首选埃及方括号。最后,如果您有
return,则不需要else。 -
@BoristheSpider 我从来没有去过埃及,也没有导入他们的括号,但我已经编程多年了。开个玩笑,我认为花括号会在埃及人的脑海中唤起其他人想要的想法。 :)
-
埃及方括号是大括号。这是关于他们的位置。
-
@EdwinBuck 花括号是括号的类型 (
{})。 Egyptian brackets(链接中的 3)是一种格式化代码块的样式,在 Java 中优于 K&R C style brackets。