有这样一个需求:
list1="1", "2", "3"
list2="a", "b", "c", "d"
现在需要把2个list交替合并,使结果为:
1, a, 2, b, 3, c, d
解决方法:
将2个list分别放到2个链表队列中,然后遍历较长的list,分别从队列中pool数据到新队列。直接看代码:
@Test
public void listTest() {
List source1 = Arrays.asList("1", "2", "3");//源list1
List source2 = Arrays.asList("a", "b", "c", "d");//源list2
//分别将2个list放入链表队列
LinkedList list1 = new LinkedList<>(source1);
LinkedList list2 = new LinkedList<>(source2);
//计算较大的数组长度
int max = source1.size() > source1.size() ? source1.size() : source2.size();
//新建一个数组list,来接受最终结果
List list = new ArrayList<>(source1.size() + source1.size());
//遍历较大长度,保证所有数据都能取到
for (int i = 0; i < max; i++) {
if (!list1.isEmpty()) {//如果队列还没取完,继续取
list.add(list1.poll());
}
if (!list2.isEmpty()) {//如果队列还没取完,继续取
list.add(list2.poll());
}
}
//打印结果
System.out.println(list);
}
查看结果:
[1, a, 2, b, 3, c, d]
更优解放方法 直接取
@Test
public void listTest() {
List source1 = Arrays.asList("1", "2", "3");//源list1
List source2 = Arrays.asList("a", "b", "c", "d");//源list2
//计算较大的数组长度
int max = source1.size() > source1.size() ? source1.size() : source2.size();
//新建一个数组list,来接受最终结果
List list = new ArrayList<>(source1.size() + source1.size());
//遍历较大长度,保证所有数据都能取到
for (int i = 0; i < max; i++) {
if (i < source1.size()) {
list.add(source1.get(i));
}
if (i < source2.size()) {
list.add(source2.get(i));
}
}
//打印结果
System.out.println(list);
}