宿題: 完全なコードではなく、より良い戦略またはアプローチを探しています。
2 つの条件の下で、整数の 2 つの arrayLists を取得しました。
- 最初のリストが 2 番目のリストより大きい
- 2 番目のリストは最初のリストよりも大きい
私の目標は、両方の条件下で 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]
条件 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]
私のコードでは、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());
}
}
}
}