Java 如何按索引顺序将两个arraylist合并为一个arraylist

Java 如何按索引顺序将两个arraylist合并为一个arraylist,java,android,arraylist,Java,Android,Arraylist,我有两个数组列表,其中包含x个相等的元素,其想法是将两个数组列表合并为一个,但我想按索引顺序逐个添加元素,目前我有下面列出的代码,但效率不高: ArrayList listA=[“a”、“c”、“e”] ArrayList listB=[“b”、“d”、“f”] ArrayList listC; 对于(int i=0;i

我有两个数组列表,其中包含x个相等的元素,其想法是将两个数组列表合并为一个,但我想按索引顺序逐个添加元素,目前我有下面列出的代码,但效率不高:

ArrayList listA=[“a”、“c”、“e”]
ArrayList listB=[“b”、“d”、“f”]
ArrayList listC;
对于(int i=0;i
输出=[“a”、“b”、“c”、“d”、“e”、“f”]


你可以试着这样做

ArrayList listC=new ArrayList()

listC.addAll(listA)
listC.addAll(listB)

然后分类


Collections.sort(listC)

只需在for循环中使用一个arraylist大小。请看我的回答:

ArrayList <String> listA = ["a", "c", "e"]
ArrayList <String> listB = ["b", "d","f"]
ArrayList <String> listC = new ArrayList(listA.size() + listB.size());
for (int i = 0; i  < listA.size(); i++){
    listC.add(listA.get(i));
    lictC.add(listB.get(i));
}
return listC;
ArrayList listA=[“a”、“c”、“e”]
ArrayList listB=[“b”、“d”、“f”]
ArrayList listC=新的ArrayList(listA.size()+listB.size());
对于(int i=0;i
此代码对您有用吗

ArrayList<ArrayList<String>> arraListOfArrayList = new ArrayList<ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
arraListOfArrayList.add(arrayList);
ArrayList ArrayList OfArrayList=新建ArrayList();
ArrayList ArrayList=新的ArrayList();
添加(arrayList);

正如我在评论中指出的,我认为这是一个XY问题

然而,这个答案可能会有所帮助。它生成一个
列表
(但不是
数组列表
),它是两个原始
列表
的交替视图,根本不需要进行任何复制。因此,它是
O(1)
而不是
O(n)


public static List alternate(final List不会
listC
为空,因此您不能调用
.add()
…而for循环将产生
索引自动边界异常
限制应为
listA.size()
,而不是
listA.size()+listB.size()
。什么意思,效率不高?除了读取所有元素并一次添加一个元素之外,还有什么其他方法可以做到呢?“可以容纳x个相等的元素”--这些元素到底有多相等?我正在将代码实现到一个android应用程序中,因此每当我使用listC返回更新textview所需的元素时,oncreate()启动应用程序需要很长时间,这就是我所说的效率低下。因此,就性能而言,我试图找出是否有其他方法可以不使用此方法。@Paulboddington你是对的,我的意思是相等的arraylist size@SashasaLauyout这会将listB附加到listA的末尾。他想要的是一个合并,其中
listA.get(N)
位于
列表b.get(N)
旁边。如果列表尚未排序,则排序将不起作用。排序位于end@GiuseppeScopelliti没有分类,因为他想把它们分类index@GiuseppeScopelliti如果列表A是
[“S”,“B”,“R”,“K”]
?@GiuseppeScopelliti如果列表A是
[“S”,“B”,“R”,“K”],而列表B是'[“Z”、“Q”、“A”、“R”]
那么结果应该是
[“S”、“Z”、“B”、“Q”、“R”、“A”、“K”、“R”]
。排序会使它们的顺序不正确。感谢您的响应,代码工作正常,应用程序现在正在加载,没有延迟时间@PaulBoddington@jpablo09这是个好消息。这是一个很长的机会,所以我真的很高兴它成功了。
AbstractList
是我最喜欢的Java类。是否还会列出其他方法,如
iterator
indexOf
add
工作?继承总是有风险的,而组合没有任何这些问题。是的,它们都能正常工作。会改变列表的方法会抛出一个异常。通常你应该支持组合而不是继承,但
AbstractList
的要点是它是为扩展而设计的。这仅在listA和listB具有相同大小时才有效。新的ArrayList(listA.size()+listB.size());是无用的。该问题具有相同大小的列表,因此我建议这样做。如果两个列表具有不同的大小,则需要相应地更改此逻辑。
ArrayList<ArrayList<String>> arraListOfArrayList = new ArrayList<ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
arraListOfArrayList.add(arrayList);
public static <T> List<T> alternate(final List<? extends T> list1, final List<? extends T> list2) {
    final int size = list1.size();
    if (list2.size() != size)
        throw new IllegalArgumentException();
    return new AbstractList<T>() {
        @Override
        public int size() {
            return 2 * size;
        }
        @Override
        public T get(int i) {
            return ((i & 1) == 0 ? list1 : list2).get(i >> 1);
        }
    };
}

public static void main(String[] args) {
    List<String> list1 = Arrays.asList("A", "B", "C");
    List<String> list2 = Arrays.asList("D", "E", "F");
    System.out.println(alternate(list1, list2));  // prints [A, D, B, E, C, F]
}