gpt4 book ai didi

java - 使用交替列表避免越界

转载 作者:行者123 更新时间:2023-11-29 07:06:18 26 4
gpt4 key购买 nike

这个方法应该接受两个列表,然后将它们放入一个新列表,然后返回它。

例如,对于第一个列表 (1, 2, 3, 4, 5) 和第二个列表 (6, 7, 8, 9, 10, 11, 12),调用 alternate(list1, list2) 应返回包含 (1, 6, 2, 7, 3, 8, 4, 9, 5, 10, 11, 12) 的列表。

我可以正常工作,但看起来很乱,有没有办法简化事情?

public static List<Integer> alternate(List<Integer> list1, List<Integer> list2) {
List<Integer> template = new LinkedList<Integer>();

int i = 0; // counts where list1 goes into new list
int j = 1; // counts where list2 goes into new list

if (list1.size() != 0) { // If first list isn't empty
for (Integer elem1: list1) { // copies all of first list into new list.
template.add(i, elem1);
i++;
}

for(Integer elem2: list2) { // copies every element into new list into every othe element
if (j < template.size()) { // if j is not at point where first list ends.
template.add(j, elem2);
j+=2;
} else {
template.add(j, elem2); // if j is at point where first list ends.
j++;
}
}
} else {
for (Integer elem1: list2) { // If first list is empty
template.add(i, elem1);
i++;
}
}

return template;
}

最佳答案

你可以用 2 Iterators 来做到这一点并行运行。使用 List#iterator() 获取列表迭代器的方法。

public static List<Integer> alternate(List<Integer> list1, List<Integer> list2) {
Iterator<Integer> iter1 = list1.iterator();
Iterator<Integer> iter2 = list2.iterator();
List<Integer> merged = new ArrayList<>();

// Iterate while there is element in any of the list
while (iter1.hasNext() || iter2.hasNext()) {
if (iter1.hasNext()) {
// This will stop adding once the iter1 has exhausted
merged.add(iter1.next());
}
if (iter2.hasNext()) {
// This will stop adding once the iter2 has exhausted
merged.add(iter2.next());
}
}

return merged;
}

public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(6, 7, 8, 9, 10, 11, 12);

System.out.println(alternate(list1, list2));
}

您甚至可以使用适用于任何类型列表的通用方法:

public static <T> List<T> alternate(List<T> list1, List<T> list2) {
Iterator<T> iter1 = list1.iterator();
Iterator<T> iter2 = list2.iterator();
List<T> merged = new ArrayList<>();

while (iter1.hasNext() || iter2.hasNext()) {
if (iter1.hasNext()) {
merged.add(iter1.next());
}
if (iter2.hasNext()) {
merged.add(iter2.next());
}
}

return merged;
}

这将能够合并 - List<String>小号,List<Double>

关于java - 使用交替列表避免越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com