Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个arraylist合并为一个arraylist_Java_Arraylist - Fatal编程技术网

Java 将两个arraylist合并为一个arraylist

Java 将两个arraylist合并为一个arraylist,java,arraylist,Java,Arraylist,我正在尝试制作一个程序,将两个arraylist合并成一个arraylist 问题是我不能使用集合,应该硬编码它。我能做到这一点,直到我来到这里。谁能帮我一下吗 public static boolean isSorted(ArrayList<Integer> list) { boolean sorted = true; for (int i = 1; i < list.size(); i++) { if (list.get(i-

我正在尝试制作一个程序,将两个arraylist合并成一个arraylist

问题是我不能使用集合,应该硬编码它。我能做到这一点,直到我来到这里。谁能帮我一下吗

public static boolean isSorted(ArrayList<Integer> list)
{
    boolean sorted = true;        
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i-1).compareTo(list.get(i)) > 0) {
            sorted = false;
        }
    }
    return sorted;
}

public static ArrayList<Integer> merge(ArrayList<Integer> a, ArrayList<Integer> b) {
    int num;
    boolean ASorted = isSorted(a);
    boolean BSorted = isSorted(b);
    ArrayList<Integer> c = new ArrayList<Integer>();


    if(ASorted == false || BSorted == false) {
        return null;

    } else {
        for(int i = 0; i < b.size(); i++){
            c.add(b.get(i));
        }
        for (int j = 0; j < a.size(); j++){
            num = a.get(j);
            if (num < c.get(j) ){
                c.add(j, num);
            } else if(j == 5|| num > c.get(j) ){
                c.add(j+2, num);
            }
        }
        return c;
    }
}
使用时:

7 8 9 and 1 4 6

这将把两个列表添加到一个列表中。您可以在此处应用任何类型的逻辑:

List<T> tList = new ArrayList<T>();
for (T element : listA) {
    tList.add(element);
}
for (T element : listB){
    tList.add(element);
}
List tList=new ArrayList();
对于(T元素:listA){
tList.add(元素);
}
对于(T元素:listB){
tList.add(元素);
}
如果需要使用迭代器,可以执行以下操作:

List<T> tList = new ArrayList<T>();
Iterator<T> fIt = listA.iterator();
while (fIt.hasNext()){
    tList.add(fIt.next());
}
Iterator<T> fIt2 = listB.iterator();
while (fIt2.hasNext()){
    tList.add(fIt2.next());
}
List tList=new ArrayList();
迭代器fIt=listA.Iterator();
while(fIt.hasNext()){
tList.add(fIt.next());
}
迭代器fIt2=listB.Iterator();
while(fIt2.hasNext()){
tList.add(fIt2.next());
}

假设您的合并方法也要在返回的
结果
列表中保留顺序,那么您的解决方案应该如下所示

while both lists have elements 
  pick top elements from lists say aInt, bInt
  compare them 
    place smaller one in result array
    move to next element in list which element was placed in result
when only one list will remain with elements
  place them in result   

这可能是您想要的,根据您的意愿更改代码。你没有提到排序,所以我不担心。但我必须告诉你们,这并没有达到真正的标准(在工作中),任务也不一样。希望它现在能帮助你

package dummy;

import java.util.ArrayList;

public class DummyList {

    final static ArrayList<Integer> list1 = new ArrayList<Integer>();
    final static ArrayList<Integer> list2 = new ArrayList<Integer>();

    private static ArrayList<Integer> merge(ArrayList<Integer> l1, ArrayList<Integer> l2) {
        ArrayList<Integer> list = new ArrayList<Integer>();

        for (Integer integer : l1) {
            list.add(integer);
        }

        for (Integer integer : l2) {
            if(!list.contains(integer))
                list.add(integer);
        }

        return list;
    }

    public static void main(String[] args) {
        list1.add(1);
        list1.add(3);
        list1.add(6);

        list2.add(2);
        list2.add(4);
        list2.add(6);

        ArrayList<Integer> mergedList = merge(list1, list2);
        System.out.println(mergedList);
        //sort here if needed.
    }

}
packagedummy;
导入java.util.ArrayList;
公营部门{
最终静态ArrayList列表1=新ArrayList();
最终静态ArrayList列表2=新ArrayList();
私有静态ArrayList合并(ArrayList l1,ArrayList l2){
ArrayList=新建ArrayList();
对于(整数:l1){
list.add(整数);
}
对于(整数:l2){
如果(!list.contains(整数))
list.add(整数);
}
退货清单;
}
公共静态void main(字符串[]args){
清单1.添加(1);
清单1.添加(3);
清单1.添加(6);
清单2.添加(2);
清单2.添加(4);
清单2.添加(6);
ArrayList mergedList=merge(列表1、列表2);
System.out.println(合并列表);
//如果需要,在这里分类。
}
}

如果您喜欢您的方式,请通过以下方式替换“j”回路:

for (int j = 0; j < a.size(); j++) {
    num = a.get(j);
    for (int k = 0; k < c.size(); k++) {
        if (num <= c.get(k)) {
            c.add(k, num);
            break;
        } else if (k + 1 == c.size()) {
            c.add(k + 1, num);
            break;
        }
    }
}
for(int j=0;jif(num)“问题是我不能使用集合”因为
ArrayList
Collection
,所以有点令人困惑。你的意思是你不能使用
Collections
实用类吗?我不能使用Collections,应该硬编码吗?你的意思是你不能使用
List#addAll
,对吗?这也意味着你不能使用
Iterator
?我可以使用Iterator,但不能使用List或col选择还是添加@LuiggiMendoza@Pshemo不能使用列表,只能具体使用ArrayList。但是您的参数是
ArrayList
,并且这个类实现了
List
。这意味着,您本质上使用的是
List
。我不能使用列表,我的教授的说明。我需要使用循环和iterator@abdulaziz嗯…就这样ange
List
by
ArrayList
。另外,由于您使用了
ArrayList
,您已经在使用
List
。是您不知道如何解释您的问题,或者您的教授不清楚这个练习。这段代码通过使用增强的for-loop同时使用迭代器和循环。伙计们,我非常严格d仅用于ArrayList,方法如下:添加、删除、设置、包含和清除
for (int j = 0; j < a.size(); j++) {
    num = a.get(j);
    for (int k = 0; k < c.size(); k++) {
        if (num <= c.get(k)) {
            c.add(k, num);
            break;
        } else if (k + 1 == c.size()) {
            c.add(k + 1, num);
            break;
        }
    }
}
public static ArrayList<Integer> merge3(ArrayList<Integer> a, ArrayList<Integer> b)
{
    if (!isSorted(a) || !isSorted(b))
    {
        return null;
    }
    else
    {
        ArrayList<Integer> c = new ArrayList<Integer>();
        for (int ai = 0, bi = 0; ai < a.size() || bi < b.size();)
        {
            if (bi == b.size() || (ai < a.size() && a.get(ai) <= b.get(bi)))
            {
                c.add(a.get(ai++));
            }
            else if (ai == a.size() || (bi < b.size() && b.get(bi) <= a.get(ai)))
            {
                c.add(b.get(bi++));
            }
        }
        return c;
    }
}