Home | 7.1 Introduction | 7.2 Methods | 7.3 Traversing | 7.4 Algorithms | 7.5 Searching | 7.6 Sorting | 7.7 Ethical Issues |
7.3 - Traversing Arraylists
ArrayLists Lesson
7.3 Traversing Arraylists
You can traverse through the elements in an ArrayList using loops. In order to traverse ArrayLists, we can use iterative statements, or loops. We can use For Each Loops, For Loops, and While Loops
The following code uses a For Each loop to traverse through the ArrayList.
//7.3.1: For Each Loop
ArrayList<Integer> myList = new ArrayList<Integer>();
myList.add(50);
myList.add(30);
myList.add(20);
int sum = 0;
for (Integer value : myList) {
sum += value;
}
System.out.println("Sum of all elements: " + sum); {
}
Sum of all elements: 100
Popcorn Hack #1:
Modify the code above so that it prints out the sum of all the elements in the list.
The problem with For Each loops is that you can’t modify the ArrayList. To do that, you will need to use another type of loop. If you attempt to modify the ArrayList, you will get a ConcurrentModificationException error.
ConcurrentModificationException Error:
- Happens when you try to modify the structure of an ArrayList using a For Each loop.
Think about it this way: Imagine you are standing in a line at the store and then somebody cuts the line. The order of the line has changed. The store doesn’t want people cutting the line becaues it changes the order and creates confusion. So, it throws out a ConcurrentModificationError to alert you that something is wrong and that you shouldn’t do it.
It’s the same for For Each Loops in Java - You can’t add or remove elements because it changes the structure of the loop.
Common mistakes with For Each Loops:
- Make sure that the data type of your variable is the same as the data type of the ArrayList
- Don’t try to modify the ArrayList!!!!!! I can’t stress this enough
For Loops
Here’s how to traverse through an arraylist using a For Loop. The following code will give you an IndexOutOfBounds error, do you know how to fix this error?
There are three major parts of a for loop:
-
Initialisation, this is where you declare the variable index
-
Boolean condition, this is where you declare the stop condition, when it’s true, it stops.
-
Update, this is the increment value, i++ is increment and i– is decrement
// 7.3.2 For Loops
ArrayList<Integer> myList = new ArrayList<Integer>();
myList.add(50);
myList.add(30);
myList.add(20);
for (int i = 0; i <= myList.size(); i++)
{
System.out.println(myList.get(i));
}
50
30
20
---------------------------------------------------------------------------
java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:361)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at .(#46:1)
IndexOutOfBoundsException
- This happens when the program is trying to fetch something that isn’t there. If we have the equals since in the for loop, it will try to fetch up to index 3 because thats the list size. When we remove the equals sign, it goes to whatever is <3, which is 2. So, it fetches up to index 2, meaning 3 elements.
Popcorn Hack 2:
Suppose we have an arraylist named grades, and we want to remove the entries that are lower than 70. Use a for loop to achieve this.
public class Main {
public static void main(String[] args) {
ArrayList<Integer> grades = new ArrayList<>();
grades.add(68);
grades.add(71);
grades.add(100);
grades.add(80);
for (int i = grades.size() - 1; i >= 0; i--) {
if (grades.get(i) < 70) {
grades.remove(i);
}
}
System.out.println(grades);
}
}