基于公共变量

时间:2016-08-02 18:16:33

标签: java join

我有两个独立的数组列表。例如:

array1 = [[1 2 3 4 5 6]]
array2 = [[3 7 8 9 10 11 16]]

我想要一个像下面这样的arraylist:

arrayResult = [[1 2 3 7 8 9 10 11 16]]

两个arraylists上有一个互变量,我希望将array1的第一部分和array2的第二部分放在一个新的arraylist中。

6 个答案:

答案 0 :(得分:0)

这是合并排序问题。尝试应用合并排序算法。检查这一点是为了更清晰和代码捕捉:Merge Sort

否则试试这个:

List<Integer> list1 = Arrays.asList(array1); 

List<Integer> list2 = Arrays.asList(array2); 

set.addAll(list1);
set.addAll(list2);

yourResult = set.toArray();

答案 1 :(得分:0)

您可以这样做:

List<Integer> a1 = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> a2 = Arrays.asList(3, 7, 8, 9, 10, 11, 16);
ArrayList<Integer> merged = new ArrayList<>();
for(Integer val: a1){
    if(val == a2.get(0)){
        for(Integer val2: a2){
            merged.add(val2);
        }
        break;
    }
    merged.add(val);
}
System.out.println(merged);

您必须确保第二个列表包含至少1个值,如果列表尚未排序,您必须对列表进行排序。

答案 2 :(得分:0)

只需遍历第一个List并检查第一个List的每个索引处的值是否存在于第二个List中。如果该值不存在,请添加第一个List值,如果该值存在,则复制第二个List中的剩余值。

List<Integer> l1 = Arrays.asList(1,2,3,4,5,6);
List<Integer> l2 = Arrays.asList(3,7,8,9,10,11,16);
List<Integer> l3 = new ArrayList<Integer>();//joined List
for ( int i = 0; i < l1.size(); i++ ){
    int index = l2.indexOf(l1.get(i));
    if ( index == -1 ){
        l3.add(l1.get(i));
    }else{
        for ( int j = index; j < l2.size(); j++ ){
            l3.add(l2.get(j));
        }
        break;
    }
}

答案 3 :(得分:0)

循环遍历array1的元素,每次检查它们是否在array2中。如果没有,添加它们并继续array1的循环。如果它存在于array2中,则停止循环array1并开始在该索引处循环array2。

这应该有帮助..

Boolean found = false;
integer foundInd = 0;
Boolean useArray1 = false;
if (array1.length >= array2.length)
    useArray1 = true

For (integer cnt1 = 0; cnt1 < array1.length; cnt1 ++)
{
    For (integer cnt2 = 0; cnt2 < array2.length; cnt2 ++)
    {
        if (array1[cnt1] == array2[cnt2])
        {
            found = true;
            foundInd = cnt2;
        }
    }
    if (useArray1 == false)
        Array2[cnt] = Array1[cnt];
    if (found == true)
        break;
}

For (integer cnt2 = foundInd; cnt2 < array2.length; cnt2 ++)
{
    if (useArray1 == true)
        useArray1[foundInd + cnt2] = array2[cnt2];
}

侧注 - 我没有创建一个新数组来存储值,而是使用了array1或array2,具体取决于哪个更长。它已经具有正确的长度,并且至少有一半的数据已经是正确位置的正确数字。

答案 4 :(得分:0)

如果您使用集合,那么您可以将两个列表放在一起,并且更容易找到公共元素...

看看这个例子:

public static void main(String[] args) {
List<Integer> a1 = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> a2 = Arrays.asList(3, 7, 8, 9, 10, 11, 16);
List<Integer> common = new ArrayList<>();
int commonw;
// merge both and find common Element.class..
// IllegalMonitorStateException must be one
common.addAll(a1);
common.retainAll(a2);
commonw = common.get(0);
common.clear();

// fill the common elements
for (int i = 0; i < a1.indexOf(commonw); i++) {
    common.add(a1.get(i));
}
for (int i = a2.indexOf(commonw) + 1; i < a2.size(); i++) {
    common.add(a2.get(i));
}
System.out.println(common);
}

答案 5 :(得分:0)

如果您有java8,可以尝试

public List<Integer> merge(List<Integer> first, List<Integer> second) {
    Integer integerToMergeAt = first.stream().filter(i -> second.indexOf(i) >= 0).findFirst().get();
    return Stream.concat(first.stream().limit(first.indexOf(integerToMergeAt)),
            second.stream().skip(second.indexOf(integerToMergeAt))).collect(Collectors.toList());
}