【发布时间】:2017-04-24 10:15:14
【问题描述】:
private List<String> values = new ArrayList<String>();
public WhitespaceEqualsTest() {
values.add("I ");
values.add("I");
values.add(". ");
values.add(".");
values.add("1");
values.add("1 ");
System.out.println(refine(values));
}
private List<String> refine(List<String> input){
ArrayList<String> outerLoopValues = (ArrayList<String>) input;
ArrayList<String> innerLoopValues = (ArrayList<String>) input;
ArrayList<String> results = new ArrayList<String>();
for(String string1 : outerLoopValues){
for(String string2 : innerLoopValues){
if(string1.contains(string2) == false){
results.add(string1);
}
}
}
Set<String> temp = new HashSet<String>();
temp.addAll(results);
results.clear();
results.addAll(temp);
return results;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((values == null) ? 0 : values.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
WhitespaceEqualsTest other = (WhitespaceEqualsTest) obj;
if (values == null) {
if (other.values != null)
return false;
} else if (!values.equals(other.values))
return false;
return true;
}
我已经覆盖了hashCode() 和equals(),所以我不太确定出了什么问题。它们是使用 Eclipse 生成的(Source -> Generate hashCode() 和 equals())。为什么没有检测到没有空格的相同字符包含在有空格的字符中?输出是:
[1, . , I , I, ., 1 ]
【问题讨论】:
-
为什么不一直使用 ArrayList 来代替列表呢?
-
我有点怀疑您是否已将
hashCode()和equals(String)覆盖为java.lang.String。请提供该代码。您只提供了一个测试,该测试(似乎)可以完全按照Strings 的方式工作。 -
OP 把所有东西都扔进一个集合,然后又回到列表中,所以他绝对不能超过 6 场比赛。
-
OP,你已经为你的类覆盖了 equals 和 hashcode。当您在
List<String>上调用contains时,不会调用这些。只会使用String#equals。List实现(在本例中为ArrayList)完全不知道您的WhitespaceEqualsTest类。 -
@AlexQuilliam 不要使用字符串。制作一个自定义字符串包装器并使用它,然后您可以覆盖 equals 和 hashCode 方法