Java 在多个独立hashMap对象中搜索特定键

Java 在多个独立hashMap对象中搜索特定键,java,hashmap,key,Java,Hashmap,Key,我有一个稍微有点理论性的问题,我想在我开始进一步编程我的解决方案之前澄清一下 背景。 我需要在2个(或可能更多)MS Access文件之间执行比较 每个文件都应该包含在其他文件中找到的数据 由于JDBC和连接到Access结果集时遇到的“限制”(它们只能向前滚动!),我创建了“java对象”(类),对结果集的结构进行建模 本质上 我有一个对象,它对结果集中的单个记录行建模(我们称之为行集) 然后,RESET对象具有行集的“数组” 然而,为了“加快速度”,我捕获了key和index列中的值,并创建

我有一个稍微有点理论性的问题,我想在我开始进一步编程我的解决方案之前澄清一下

背景。 我需要在2个(或可能更多)MS Access文件之间执行比较

每个文件都应该包含在其他文件中找到的数据

由于JDBC和连接到Access结果集时遇到的“限制”(它们只能向前滚动!),我创建了“java对象”(类),对结果集的结构进行建模

本质上 我有一个对象,它对结果集中的单个记录行建模(我们称之为行集) 然后,RESET对象具有行集的“数组”

然而,为了“加快速度”,我捕获了key和index列中的值,并创建了一个“key_index”到相关行集对象的hashMap

然后,我将执行以下操作

以第一个RESET对象(用作主对象)为例,从中收集单个的Key_索引哈希映射(我们称之为“aKey”

现在使用此“aKey”对象搜索其他可用的RESET对象,并查看其中是否包含与“aKey”中的值匹配的key_索引值

然而,我刚才有一个相当恼人的想法

如果我使用代码 女贞子。得到(阿凯) 在我的另一个Reset对象上,我会遇到问题,因为“aKey”对象显然不是同一个对象-尽管它的内容应该是相同的(即可比较的)

我必须说,当我阅读我的问题时,我认为它的措辞不好…所以我认为我将包括我创建的类的副本

重要部分包括:

成员: 质询-一个“结果集”类型对象的arrayList

方法: 挑战

包装KWhite;
/**
*RScomparator是为比较复式数据库系统而设计的,如下所示
*通常发生在本地运行的医疗试验数据中。
* 
*复式输入是为了确保在输入过程中没有错误,执行输入
*在单独的独立实例中。rscolmperator对象特别能够
*作为其输入的结果集的数量(即来自多个独立创建的数据库的查询)
* 
*应该认识到,这个对象可能应该作为DBcomparator的一部分调用
*反对。
* 
*/
//这里进口
//导入记录器类和所需的依赖项。。。
导入java.util.ArrayList;
导入java.util.HashMap;
导入org.apache.log4j.propertyConfiguration;
导入MrBlue.DB_表;
导入TawuaiLogger.TawuaiLogger;
公共类RScomparator{
//静态变量
//记录器实例
私有静态最终TawuaiLogger.TawuaiLogger errLog=新的TawuaiLogger(“RScomparator”);
//类成员变量
/**这是一组选择的RESET对象,这些对象的数据将受到质疑*/
私人ArrayList挑战;
/**正在质询的当前表的名称*/
私有字符串表名;
/**用于元数据引用的“表”对象,可用于获取列类型等*/
专用数据库表;
//这些是我们的报表对象
/**质询失败的报告数组*/
私有数组列表失败;
/**错误的报告数组(无法创建挑战者,找不到等效值)*/
私有数组列表错误;
/**良好值的报告数组*/
私人ArrayList的成功;
/**这是主类或构造函数
* 
*如果是构造函数,则重命名以反映类的名称
*@param args
*/
public RScomparator(DB_Table t)//TODO根据需要添加参数
{
PropertyConfigurator.configure(“Log4j.properties”);
//TODO自动生成的方法存根
challenge=newarraylist();
//为此挑战场景初始化报告对象
fail=新建ArrayList();
errors=newarraylist();
成功=新建ArrayList();
表=t;
tableName=t.getTblName();
}
//类方法在这里
/**
*将结果集对象添加到此比较器
* 
*@param r正在插入此质询的结果集对象。
* 
*/
公共无效添加挑战者(RESET_KW r)
{
本.挑战.加(r);
}
/**
*这将运行比较过程。。。
*虽然本身没有返回任何细节,但它调用了其他确实返回值的方法
*
*/
公开挑战()
{
//要完成此方法,请在途中创建报表对象
//这是将要比较的两个结果集对象
RESET_KW黄金=新RESET_KW();
ResSet_KW银色=新ResSet_KW();
//确保挑战者列表中包含对象。
if(challenge.size()<2)
{
//它必须有2个对象。。
errLog.add(3,“没有可用于比较表的结果”+此.tableName);
//无论哪种方式,我们都应该创建报表对象。
此.errors.add(新报告_KW(表名));
//打破这种方法。
返回;
}
//获取第一行数据
gold=challenge.get(0);//第一个结果集。
//对于结果集中的每一列,在其他列中搜索相同的键。。
for(HashMap c:gold.getRS().keySet())
{//c是映射中的键值
//在质询对象上循环
对于(inti=1;i你说:

如果我在另一个RESET对象上使用代码reset.get(aKey) “aKey”对象显然不同,我会有问题吗 对象-尽管其内容应相同(即可比较)

必须分别实现
equals()
hashcode()
。仅实现
equals()
是不够的,如果对象相等,
hashcode()
必须相同

例如:

import java.util.HashMap;
import java.util.Map;

class A {
    String name;
    Integer number;

    public A(String name, Integer number) {
    super();
    this.name = name;
    this.number = number;
    }

}

class B {
    String name;
    Integer number;

    public B(String name, Integer number) {
    super();
    this.name = name;
    this.number = number;
    }

    @Override
    public boolean equals(Object obj) {
    if (obj instanceof B) {
        return obj == this || (name.equals(((B) obj).name) && number.equals(((B) obj).number));
    }
    return false;
    }

    @Override
    public int hashCode() {
    return name.hashCode() + number.hashCode();
    }
}

public class TestHashMap {

    public static void main(String... args) {
        A a1 = new A("a", 1);
        A anotherA1 = new A("a", 1);

        Map<A, String> as = new HashMap<A, String>();

        as.put(a1, "a1");

        System.out.println(as.get(anotherA1)); // prints null

        B b1 = new B("b", 1);
        B anotherB1 = new B("b", 1);

        Map<B, String> bs = new HashMap<B, String>();

        bs.put(b1, "b1");

        System.out.println(bs.get(anotherB1)); // prints b1

    }

}
import java.util.HashMap;
导入java.util.Map;
甲级{
字符串名;
整数;
公共A(字符串名称,整数){
超级();
this.name=名称;
这个数字=数字;
}
}
B类{
字符串名;
整型麻木
import java.util.HashMap;
import java.util.Map;

class A {
    String name;
    Integer number;

    public A(String name, Integer number) {
    super();
    this.name = name;
    this.number = number;
    }

}

class B {
    String name;
    Integer number;

    public B(String name, Integer number) {
    super();
    this.name = name;
    this.number = number;
    }

    @Override
    public boolean equals(Object obj) {
    if (obj instanceof B) {
        return obj == this || (name.equals(((B) obj).name) && number.equals(((B) obj).number));
    }
    return false;
    }

    @Override
    public int hashCode() {
    return name.hashCode() + number.hashCode();
    }
}

public class TestHashMap {

    public static void main(String... args) {
        A a1 = new A("a", 1);
        A anotherA1 = new A("a", 1);

        Map<A, String> as = new HashMap<A, String>();

        as.put(a1, "a1");

        System.out.println(as.get(anotherA1)); // prints null

        B b1 = new B("b", 1);
        B anotherB1 = new B("b", 1);

        Map<B, String> bs = new HashMap<B, String>();

        bs.put(b1, "b1");

        System.out.println(bs.get(anotherB1)); // prints b1

    }

}