Java: intercale dos arrailistas basados en enteros -> ¿buen enfoque?
Tarea: Buscar una mejor estrategia o un enfoque en lugar de un código completo.
Tengo dos listas de enteros en dos condiciones:
La primera lista es más grande que la segunda.la segunda lista es más grande que la primeraMi objetivo era intercalar elementos de list2, en list1 en ambas condiciones. He creado un método que hace esto, pero siento que podría estar haciendo algo mejor.
Aquí está el resultado esperado para la condición 1. Tenga en cuenta que una vez agotados los elementos de list2, dejamos los elementos de list1 en su lugar:
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]
Aquí está el resultado esperado para la condición 2. Ya que list2 tiene más elementos, agregamos estos elementos a list1 después de que se haya agotado 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]
Mi código usa una sentencia if-else para procesar ambas condiciones. Luego uso un iterador para recorrer los elementos de list2 e insertarlos en 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());
}
}
}
}