Java Set实现等于方法始终返回false

Java Set实现等于方法始终返回false,java,set,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; }

我的一个方法在
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;
}
EDIT3:在我的程序中,我一直在搞乱它,每次我放入一个真实的集合,它都会输出false。如果我只创建了两个不存在的集合并调用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;
}
import java.util.*;
公共类集{
私有字符串名称;
私有整数大小=0;
私有E[]数据;
专用静态最终int初始容量=100;
专用int容量=0;
公共集(){
容量=初始容量;
数据=(E[])新整数[容量];
}
公共集(字符串名称){
this.name=名称;
容量=初始容量;
数据=(E[])新整数[容量];
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
私有void重新分配(){
容量=2*容量;
}

比较应该是.equals而不是==。

尝试如下:

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;
}
公共布尔等于(集合s){
如果(this.size()==s.size()){
对于(int i=0;i
您的问题是您没有覆盖
equals()

签名不正确

public boolean equals(Set<E>) 

这就是为什么添加
@Override
注释时会出现编译器错误。必须使用Object作为参数,然后检查
实例的
并强制转换。

为什么有
数据[i]
?它不应该是
这个。获取(i)
?@Jonathan
数据[i]
是我存储集合中所有值的数组。因此它与执行此操作基本相同。get(I)对吗?多个问题:如果有任何元素匹配,您将立即
返回true
。您假设元素的顺序相同,而您没有指定这是实现的属性。您使用的是
==
而不是
equals
。可能最直接相关的是,您没有覆盖
对象#als(Object)
;始终使用
@覆盖
。另一个问题:由于您的参数是
,因此无法保证它将是您的类。它可以是任何
,包括
哈希集
,现在您无法知道顺序是什么
将返回内容。请尝试使用
@Override
对您的方法进行注释,看看会发生什么。谢谢,我进行了更正,但它仍然会对所有内容输出false。我使用两组
(1,2,3,4)
进行了尝试,但它再次输出false。当我输入两组甚至不存在的内容时,它会返回true。这是什么原因?
public boolean equals(Set<E>) 
public boolean equals(Object)