Start learning free

LESSON 98 OF 410 · ARRAYS I

ArrayList Size in Java

Lesson Read the full explanation

We can get the size of an ArrayList using the .size() method:

List<Integer> ourArray = new ArrayList<>(List.of(50, 40, 30));

// Printing the size:
System.out.println(ourArray.size()); // Output: 3

// Changing the ArrayList:
ourArray.remove(2);

// Printing the new size:
System.out.println(ourArray.size()); // Output: 2

Using the size

We can use the size to access items from the end of an ArrayList.

Because ArrayLists are 0-indexed, the index of the last item is size - 1:

List<Integer> ourArray = new ArrayList<>(List.of(50, 40, 30));

int size = ourArray.size();

// Printing the last item:
System.out.println(ourArray.get(size - 1)); // Output: 30

// Printing the second to last item:
System.out.println(ourArray.get(size - 2)); // Output: 40

Assignment
Follow the Coding Tutorial and let's play with some arrays.


Hint
Look at the examples above if you get stuck.


STEP 1 OF 3
    Ctrl + Enter to check

    JAVA · ARRAYS I

    Array Length in Java, explained

    Introduction

    In this lesson, we will explore how to determine the size of an ArrayList in Java using the .size() method. Understanding how to work with the size of an ArrayList is crucial for various programming tasks, such as iterating through elements, adding or removing items, and accessing elements from the end of the list. This concept is particularly useful in scenarios where dynamic data structures are required, such as managing a list of user inputs or processing a collection of items.

    Understanding the Basics

    An ArrayList in Java is a resizable array, which means it can grow and shrink in size dynamically. The .size() method returns the number of elements currently stored in the ArrayList. This is different from the array's length property, which is fixed once the array is created. Let's look at a simple example to illustrate this:

    List<String> fruits = new ArrayList<>(List.of("Apple", "Banana", "Cherry"));
    System.out.println(fruits.size()); // Output: 3
    

    In this example, the ArrayList fruits contains three elements, so the .size() method returns 3.

    Main Concepts

    The key concept here is understanding how to use the .size() method to manage and manipulate the elements of an ArrayList. The .size() method is particularly useful when you need to:

    • Iterate through the elements of the ArrayList.
    • Access elements from the end of the ArrayList.
    • Determine if the ArrayList is empty.

    Let's see how to apply these concepts with clear examples:

    List<Integer> numbers = new ArrayList<>(List.of(10, 20, 30, 40, 50));
    
    // Iterating through the ArrayList
    for (int i = 0; i < numbers.size(); i++) {
        System.out.println(numbers.get(i));
    }
    
    // Accessing the last element
    System.out.println(numbers.get(numbers.size() - 1)); // Output: 50
    
    // Checking if the ArrayList is empty
    if (numbers.size() == 0) {
        System.out.println("The ArrayList is empty.");
    } else {
        System.out.println("The ArrayList is not empty.");
    }
    

    Examples and Use Cases

    Let's explore some more examples and real-world use cases where understanding the size of an ArrayList is beneficial:

    List<String> tasks = new ArrayList<>(List.of("Task 1", "Task 2", "Task 3"));
    
    // Adding a new task
    tasks.add("Task 4");
    System.out.println("Number of tasks: " + tasks.size()); // Output: 4
    
    // Removing a task
    tasks.remove("Task 2");
    System.out.println("Number of tasks: " + tasks.size()); // Output: 3
    
    // Accessing the last task
    System.out.println("Last task: " + tasks.get(tasks.size() - 1)); // Output: Task 4
    

    In this example, we manage a list of tasks by adding and removing items, and we use the .size() method to keep track of the number of tasks.

    Common Pitfalls and Best Practices

    When working with the size of an ArrayList, there are some common mistakes to avoid:

    • Accessing elements using an index that is out of bounds. Always ensure the index is within the valid range (0 to size-1).
    • Modifying the ArrayList while iterating through it, which can lead to ConcurrentModificationException. Use an iterator if you need to modify the list during iteration.

    Best practices include:

    • Always check the size of the ArrayList before accessing elements to avoid IndexOutOfBoundsException.
    • Use enhanced for-loops or iterators for safer and more readable code when iterating through the list.

    Advanced Techniques

    For advanced usage, you can combine the .size() method with other collection methods to perform complex operations. For example, you can use streams to filter and process elements based on their size:

    List<String> words = new ArrayList<>(List.of("apple", "banana", "cherry", "date", "elderberry"));
    
    // Filtering words with length greater than 5
    List<String> longWords = words.stream()
                                      .filter(word -> word.length() > 5)
                                      .collect(Collectors.toList());
    
    System.out.println("Long words: " + longWords); // Output: [banana, cherry, elderberry]
    

    This example demonstrates how to use streams to filter elements based on their length, showcasing the power of combining ArrayList methods with other Java features.

    Code Implementation

    Here is a well-commented code snippet demonstrating the correct use of the .size() method in various scenarios:

    import java.util.ArrayList;
    import java.util.List;
    
    public class ArrayListSizeExample {
        public static void main(String[] args) {
            // Creating an ArrayList with initial elements
            List<Integer> numbers = new ArrayList<>(List.of(10, 20, 30, 40, 50));
    
            // Printing the size of the ArrayList
            System.out.println("Size of the ArrayList: " + numbers.size()); // Output: 5
    
            // Removing an element
            numbers.remove(2); // Removes the element at index 2 (30)
            System.out.println("Size after removal: " + numbers.size()); // Output: 4
    
            // Accessing the last element
            System.out.println("Last element: " + numbers.get(numbers.size() - 1)); // Output: 50
    
            // Iterating through the ArrayList
            for (int i = 0; i < numbers.size(); i++) {
                System.out.println("Element at index " + i + ": " + numbers.get(i));
            }
    
            // Checking if the ArrayList is empty
            if (numbers.size() == 0) {
                System.out.println("The ArrayList is empty.");
            } else {
                System.out.println("The ArrayList is not empty.");
            }
        }
    }
    

    Debugging and Testing

    When debugging code that involves ArrayList size, consider the following tips:

    • Use print statements to check the size of the ArrayList at different points in your code.
    • Ensure that you are not accessing elements outside the valid index range.

    For testing, you can write unit tests to verify the behavior of your methods that manipulate the ArrayList:

    import org.junit.jupiter.api.Test;
    import static org.junit.jupiter.api.Assertions.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ArrayListSizeTest {
        @Test
        public void testArrayListSize() {
            List<Integer> numbers = new ArrayList<>(List.of(10, 20, 30, 40, 50));
            assertEquals(5, numbers.size());
    
            numbers.remove(2);
            assertEquals(4, numbers.size());
    
            assertEquals(50, numbers.get(numbers.size() - 1));
        }
    }
    

    Thinking and Problem-Solving Tips

    When approaching problems related to ArrayList size, consider the following strategies:

    • Break down the problem into smaller parts, such as adding, removing, and accessing elements.
    • Use the .size() method to guide your logic, especially when iterating through the list or accessing elements from the end.
    • Practice with different scenarios to become comfortable with dynamic data structures.

    Conclusion

    In this lesson, we covered the importance of understanding and using the .size() method with ArrayList in Java. Mastering this concept allows you to effectively manage and manipulate dynamic lists, which is a fundamental skill in programming. We encourage you to practice and explore further applications to solidify your understanding.

    Additional Resources

    For further reading and practice problems, consider the following resources:

    Keep going with JavaAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free