Pat*_*t K 0 java iterator arraylist
作业:寻找更好的策略或方法而不是完整的代码。
在两种情况下,我有两个整数的arrayLists:
我的目标是在两种情况下都将list2的元素插入到list1中。我创建了一个可以做到这一点的方法,但是我觉得自己可以做得更好。
这是条件1的预期结果。请注意,在用尽list2的元素之后,我们将list1的元素保留在原位:
list1: [10, 20, 30, 40, 50, 60, 70]
list2: [4, 5, 6, 7]
Combined: [10, 4, 20, 5, 30, 6, 40, 7, 50, 60, 70]
Run Code Online (Sandbox Code Playgroud)
这是条件2的预期结果。由于list2包含更多元素,因此我们在list1用尽后将这些元素附加到list1上:
list1: [10, 20, 30, 40]
list2: [4, 5, 6, 7, 8, 9, 10, 11]
Combined: [10, 4, 20, 5, 30, 6, 40, 7, 8, 9, 10, 11]
Run Code Online (Sandbox Code Playgroud)
我的代码使用if-else语句来处理这两个条件。然后,我使用迭代器遍历list2的元素并将其插入list1。
public static void main(String[] Args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
//numbers.add(50);
//numbers.add(60);
//numbers.add(70);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4);
numbers2.add(5);
numbers2.add(6);
numbers2.add(7);
numbers2.add(8);
numbers2.add(9);
numbers2.add(10);
numbers2.add(11);
System.out.println("list1: " + numbers);
System.out.println("list2: " + numbers2);
interleave(numbers, numbers2);
System.out.println();
System.out.println("Combined: " + numbers);
}
public static void interleave(ArrayList<Integer> list1, ArrayList<Integer> list2)
{
//obtain an iterator for the collection
Iterator<Integer> itr2 = list2.iterator();
//loop counter
int count = 1;
//handle based on initial size of lists
if(list1.size() >= list2.size())
{
//loop through the first array and add elements from list 2 after each element
while(itr2.hasNext())
{
//insert elements from list2
list1.add(count, itr2.next());
//make sure elements are getting added at 1, 3, 5, 7, 9, etc
count = count + 2;
}
}
else if(list1.size() < list2.size())
{
//loop through the first array and add elements from list 2 after each element
while(itr2.hasNext())
{
if(count <= list1.size())
{
//insert elements from list2
list1.add(count, itr2.next());
//make sure elements are getting added at 1, 3, 5, 7, 9, etc
count = count + 2;
}
else
{
//fill in the remainder of the elements from list2 to list1
list1.add(itr2.next());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你喜欢这个解决方案吗?
public static void main(final String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40);
//numbers.add(50); numbers.add(60); numbers.add(70);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4); numbers2.add(5); numbers2.add(6); numbers2.add(7);
numbers2.add(8); numbers2.add(9); numbers2.add(10); numbers2.add(11);
System.out.println("list1: " + numbers);
System.out.println("list2: " + numbers2);
List<Integer> interleaved = interleave(numbers, numbers2);
System.out.println("\nCombined: " + interleaved);
}
public static List<Integer> interleave(
final List<Integer> list1,
final List<Integer> list2
) {
List<Integer> result
= new ArrayList<Integer>(list1.size() + list2.size());
Iterator<Integer> it1 = list1.iterator();
Iterator<Integer> it2 = list2.iterator();
while (it1.hasNext() || it2.hasNext()) {
if (it1.hasNext()) {
result.add(it1.next());
}
if (it2.hasNext()) {
result.add(it2.next());
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)