我的一种方法不适用于Set
类的Java实现。为什么equals
始终返回false
?
public boolean equals(Set<E> s) {
if(this.size() == s.size()){
for(int i = 0; i < size(); i++){
if(theData[i] == s.get(i)){
return true;
}
}
}
return false;
}
我的设置为Set<Integer>
,我将一组(1,2,3,4)和(1,2,3,4)组合在一起,并输出false
。
编辑:我的所有套装都是从最小到最大的订购。
EDIT2:这是我在主驱动程序中处理equals的代码
else if(spaceSplit[0].equals("equal")){
if(spaceSplit.length == 3){
String fSet = spaceSplit[1];
String sSet = spaceSplit[2];
int fSetIndex = 0;
int sSetIndex = 0;
for(int i = 0; i < sets.size(); i++){
if(((Set<Integer>) sets.get(i)).getName().equals(fSet)){
fSetIndex = i;
}
}
for(int i = 0; i < sets.size(); i++){
if(((Set<Integer>) sets.get(i)).getName().equals(sSet)){
sSetIndex = i;
}
}
System.out.println(sets.get(fSetIndex).equals(sets.get(sSetIndex)));
} else {
System.out.println("Parameters entered wrong, please try again.");
}
EDIT3:在我的程序中,我一直在弄乱它,并且每当我放入一个真正的设置时它输出错误。如果我只是编造了2套不存在并且调用equals方法,它输出true
。我很困惑。
EDIT4:这里有更多的设定代码:
import java.util.*;
public class Set<E extends Comparable> {
private String name;
private int size = 0;
private E[] theData;
private static final int INITIAL_CAPACITY = 100;
private int capacity = 0;
public Set() {
capacity = INITIAL_CAPACITY;
theData = (E[]) new Integer[capacity];
}
public Set(String name) {
this.name = name;
capacity = INITIAL_CAPACITY;
theData = (E[]) new Integer[capacity];
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void reallocate() {
capacity = 2 * capacity;
}
答案 0 :(得分:0)
比较应该是.equals而不是==。
答案 1 :(得分:0)
尝试这样:
public boolean equals(Set<E> s) {
if(this.size() == s.size()){
for(int i = 0; i < size(); i++){
if(!this.get(i).equals(s.get(i))){
return false;
}
}
return true;
}
return false;
}
答案 2 :(得分:0)
您的问题是您不能覆盖equals()
签名不是
public boolean equals(Set<E>)
是
public boolean equals(Object)
这就是为什么当你添加@Override
注释时会出现编译错误。您必须使用Object作为参数,然后检查instanceof
和强制转换。