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)