我有两个独立的数组列表。例如:
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中。
答案 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());
}