"How about I start with what's actually useful? You'll now see a couple of ways that ArrayList and generics can be put to work:"

**"Example 1:"**

Read a list of numbers from the keyboard

```
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) );
ArrayList<Integer> list = new ArrayList<Integer>() ;
while (true)
{
String s = reader.readLine();
if (s.isEmpty()) break;
list.add(Integer.parseInt(s));
}
}
```

**"Example 2:"**

Same as above, but even numbers are added to the end of the list, odd – to the beginning of it.

```
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> list = new ArrayList<Integer>();
while (true)
{
String s = reader.readLine();
if (s.isEmpty()) break;
int x = Integer.parseInt(s);
if (x % 2 == 0) // Check that the remainder is zero when we divide by two
list.add(x); // Add to the end
else
list.add(0, x); // Add to the beginning
}
}
```

**"Example 3:"**

Delete all numbers larger than 5:

```
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) );
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(7);
list.add(11);
list.add(3);
list.add(15);
for (int i = 0; i < list.size(); ) // We moved the statement that increases i to inside the loop
{
if (list.get(i) > 5)
list.remove(i); // Don’t increase i if we deleted the current element
else
i++;
}
}
```

**"Example 4:"**

Divide an array into two parts – even and odd numbers

```
public static void main(String[] args) throws IOException
{
// Static initialization of the array
int[] data = {1, 5, 6, 11, 3, 15, 7, 8};
// Create a list where all elements are Integers
ArrayList<Integer> list = new ArrayList<Integer> ();
// Use the array to fill the list
for (int i = 0; i < data.length; i++) list.add(data[i]);
ArrayList<Integer> even = new ArrayList<Integer>(); // Even numbers
ArrayList<Integer> odd = new ArrayList<Integer>(); // Odd numbers
for (int i = 0; i < list.size(); i++)
{
Integer x = list.get(i);
if (x % 2 == 0) // If x is even
even.add(x); // Add x to the collection of even numbers
else
odd.add(x); // Add x to the collection of odd numbers
}
}
```

**"Example 5:"**

Merge lists

```
public static void main(String[] args) throws IOException
{
ArrayList<Integer> list1 = new ArrayList<Integer>(); // Create a list
Collections
```**.addAll**(list1, 1, 5, 6, 11, 3, 15, 7, 8); // Fill the list
ArrayList<Integer> list2 = new ArrayList<Integer>();
Collections**.addAll**(list2, 1, 8, 6, 21, 53, 5, 67, 18);
ArrayList<Integer> result = new ArrayList<Integer>();
result**.addAll**(list1); // Add all values from each list to the new list
result**.addAll**(list2);
** for** (Integer x : result) // A fast way to loop over all elements, only for collections
{
System.out.println(x);
}
}

"Cool! Will Diego now give me a truck load of similar exercises?"

"Yes, he will."

GO TO FULL VERSION

list.size()on every iteration, so it is being updated every time? In the Java books I've read authors usually strongly discourage changing the size of the list/array if you are using its size as a loop condition, considering it as a bad practice and a possible source of bugs.