Java 从接口集移除所有

Java 从接口集移除所有,java,hashmap,set,Java,Hashmap,Set,我想将数据库转储与xml和*.sql进行比较。在debaggetoRemove和toAdd中,仅尺寸不同toRemove的大小为3,toAdd的大小为4。但运行代码后,removeAll,toRemove的大小为3,而toAdd的大小为4。怎么了 final DBHashSet fromdb = new DBHashSet(strURL, strUser, strPassword); final DBHashSet fromxml = new DBHashSet(namefile); Set&

我想将数据库转储与xml和*.sql进行比较。在debagge
toRemove
toAdd
中,仅尺寸不同
toRemove
的大小为3,
toAdd
的大小为4。但运行代码后,
removeAll
toRemove
的大小为3,而
toAdd
的大小为4。怎么了

final DBHashSet fromdb = new DBHashSet(strURL, strUser, strPassword);
final DBHashSet fromxml = new DBHashSet(namefile);

Set<DBRecord> toRemove = new HashSet<DBRecord>(fromdb);
toRemove.removeAll(fromxml);

Set<DBRecord> toAdd = new HashSet<DBRecord>(fromxml);
toAdd.removeAll(fromdb);

为了正确使用
HashSet
(以及
HashMap
),必须按照以下步骤实现
hashCode()

  • 在Java应用程序的执行过程中,每当在同一对象上多次调用hashCode方法时,只要没有修改对象上的equals比较中使用的信息,hashCode方法必须始终返回相同的整数。从应用程序的一次执行到同一应用程序的另一次执行,该整数不必保持一致
  • 如果根据equals(Object)方法两个对象相等,那么对两个对象中的每一个调用hashCode方法必须产生相同的整数结果
  • 根据equals(java.lang.Object)方法,如果两个对象不相等,则对这两个对象中的每一个调用hashCode方法都必须产生不同的整数结果,这不是必需的。但是,程序员应该知道,为不相等的对象生成不同的整数结果可能会提高哈希表的性能
您为
DBRecord
提供的代码没有覆盖它,因此出现了问题。 您可能希望通过以下方式或类似方式覆盖它:

@Override
public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + depcode.hashCode();
  result = prime * result + depjob.hashCode());
  return result;
}

检查您的
hashCode
equals()
实现。我们可以查看您的DBRecord类吗?使用DBRecord类更新post
@Override
public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + depcode.hashCode();
  result = prime * result + depjob.hashCode());
  return result;
}