Java 基于类变量值合并两个类数组的最佳方法

Java 基于类变量值合并两个类数组的最佳方法,java,arrays,Java,Arrays,使用Java,根据类的某些值合并两个类数组的最佳方法是什么 例如,我们有两个类: public class C1{ public String id=""; public String value=""; public String tot=""; } public Class C2{ public String id=""; public String tot=""; } 在我们的代码中,有两个数组,如: //id -value - tot C1 a

使用Java,根据类的某些值合并两个类数组的最佳方法是什么

例如,我们有两个类:

public class C1{
  public String id="";
  public String value="";
  public String tot="";
}

public Class C2{
 public String id="";
 public String tot="";
}
在我们的代码中,有两个数组,如:

            //id -value - tot
C1 a [] = { {"1","value#1",""}, 
            {"2","value#2",""}, 
            {"3","value#3",""}, 
            {"4","value#4",""}
    };
                //id - tot
    C2 b [] = { {"1","2"}, 
                {"2","11"}, 
                {"4","15"}
};
最后一个数组应该如下所示:

C1 f [] = { {"1","value#1","2"}, 
            {"2","value#2","11"}, 
            {"3","value#3",""}, 
            {"4","value#4","15"}
};

我正试图找出实现这一结果的最佳方法,而不必从头到尾读取一个或另一个数组,因为这里两个数组只有很少的行,但实际上它们都可以有100k+的长度……

这听起来像是一个教科书示例,说明了使用hadoop和map reduce分发时应该做的事情。根据您的抱负水平和预算(以及此操作对时间的要求),可能值得研究。

地图中放置一个数组,其中关键是
id
。遍历另一个数组,在映射中查找
id
,并更新值。如果使用
TreeHashMap
,可以按键的顺序将值取出来。

这是数据库引擎为生存而做的事情。让我们看看他们是怎么做的: a) 为了将非常小的数据集与其他单嵌套循环连接起来。这是效率最低的方法
b) 如果一个集合足够小,可以放入内存中,您可以将其作为键值对放入hashmap中,然后对较小的数据集执行一个路径以查找所有匹配项
c) 如果数组按键排序,则可以执行合并排序联接。您只需浏览数据集并查找匹配项。如果已经对一个数组进行了排序,那么可以对第二个数组进行排序,然后使用此算法
d) 如果两个数据集都太大,无法容纳内存,则可以使用grace hash join。通过散列两个数据集的连接键,将它们划分为X个存储桶。如果使用相同的散列函数,则可以确保只需加入相应的存储桶。然后您可以使用上述任何一种技术加入bucket。
e) 如果您有真正的大数据集,Hadoop和Map/Reduce是一个不错的选择。在内部,它将对两个数据集进行排序,然后让您进行连接。

f) 您可以将Hadoop与Hive结合起来,只需将数据放入其表中,并让它进行连接。我认为此选项对于大数据量最为实用。

按键对阵列排序。通过增加键来检查数组,比较它们是否匹配,如果匹配,则使用反射将C2的所有属性复制到C1。上面的注释是一个很好的解决方案,但我认为反射是多余的,除非出于某种原因,您不知道在编译时需要复制哪些字段。