Set Implementation Equals Method始终返回false

时间:2015-11-02 03:11:23

标签: java set

我的一种方法不适用于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;
}

3 个答案:

答案 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和强制转换。