我构建了一个非常简单的自定义比较器,我将它与 TreeSet 一起使用,以便按该 TreeSet 中的长度对字符串进行排序。
(s1.equals(s2))
即使两个字符串 s1 和 s2 包含相同的值,我也很难找到返回 false 的原因。
Eclipse“变量视图”显示两个字符串中的字母相同,但“id”不同,我想这就是equals返回False的原因。顺便说一句,那id=" "
代表什么?它是某种指向 String 对象数据的指针吗?
public class MyComparator implements Comparator<String> {
public int compare(String s1, String s2) {
if(s1.length()<s2.length()) return -1;
else if (s1.length()>s2.length()) return 1;
return 0;
else if (s1.equals(s2)) return 0; //?? ALWAYS RETURNS FALSE
else if (s1.toString().equals(s2.toString()))//SAME PROBLEM HERE (test)
else return -1;
}
public boolean equals(String s) {
if (this.equals(s)) return true;
else return false;
}
}
现在这里是我使用这个自定义比较器的地方:
combinations = new TreeSet<String>(new MyComparator());
substring()
我用该方法构建的几个字符串填充组合。
由于前面提到的问题,组合包含重复项。
当我为此 TreeSet 设置 NO 自定义比较器时,不再有重复项(这就是我想要的),但它按字母顺序排序,这是正常的,但不是我的目的。