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));
}
}