Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java 实现两个列表的交错合并

Java 笔记 Java 笔记


Java 实现两个列表(list)的元素交错合并(拼接)。

需求

Java 实现两个列表的元素交错合并,如有两个列表 a=["o","p","q"]b=["x","y","z"],写个方法,将列表连接后返回结果为:["o","x","p","y","q","z"]

注:对于临界条件可以兼容,如两个列表长度不相等或其中为空等等情况。

样例

import java.util.ArrayList;
import java.util.List;

public class Demo {

    /**
     * 将两个列表的元素交错合并为一个列表
     *
     * @param list1 第一个列表
     * @param list2 第二个列表
     * @return
     */
    public static List<String> interlacedCombine(List<String> list1, List<String> list2) {
        int size1 = list1.size();
        int size2 = list2.size();

        int minSize = Math.min(size1, size2);

        List<String> list = new ArrayList<>(size1 + size2);

        if (minSize > 0) {
            /**
             * 以最小的列表大小,交错合并
             */
            for (int i = 0; i < minSize; i++) {
                String str1 = list1.get(i);
                String str2 = list2.get(i);
                list.add(str1);
                list.add(str2);
            }

            /**
             * 将 size 更大的列表交错后,多余的部分直接追加到尾部
             */
            if (size1 > size2) {
                list.addAll(list1.subList(size2, size1));
            } else if (size1 < size2) {
                list.addAll(list2.subList(size1, size2));
            }
        } else {//  至少有一个空列表时
            if (!list1.isEmpty()) {
                list.addAll(list1);
            }
            if (!list2.isEmpty()) {
                list.addAll(list2);
            }
        }

        return list;
    }

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("x1");
        list1.add("x2");
        list1.add("x3");
        list1.add("x4");
        list1.add("x5");
        list1.add("x6");

        list2.add("y1");
        list2.add("y2");
        list2.add("y3");
        list2.add("y4");
        list2.add("y5");
        list2.add("y6");
        list2.add("y7");

        System.out.println(interlacedCombine(list1, list2));

    }

}