Your shopping cart can't be a fixed-size array - users add and remove items constantly. ArrayList grows and shrinks automatically, handling the resizing so you can focus on your logic.

Add items to a cart

Create an ArrayList and add elements dynamically.

ShoppingCart.java
import java.util.ArrayList;

public class ShoppingCart {
    public static void main(String[] args) {
        // Create an empty shopping cart
        ArrayList<String> cart = new ArrayList<>();
        
        System.out.println("=== Shopping Session ===");
        System.out.println("Cart starts empty: " + cart);
        System.out.println("Items in cart: " + cart.size());
        
        // Add items to cart
        cart.add("Milk");
        System.out.println("Added Milk: " + cart);
        
        cart.add("Bread");
        System.out.println("Added Bread: " + cart);
        
        cart.add("Eggs");
        System.out.println("Added Eggs: " + cart);
        
        // Add more items
        cart.add("Butter");
        cart.add("Cheese");
        cart.add("Yogurt");
        System.out.println("Added more: " + cart);
        
        // Insert at specific position (beginning)
        cart.add(0, "Coffee");
        System.out.println("Inserted Coffee at start: " + cart);
        
        System.out.println("\n=== Final Cart ===");
        System.out.println("Items: " + cart);
        System.out.println("Total items: " + cart.size());
    }
}

ArrayList<String> holds strings. Use add() to append items.

ArrayList Resizable array: grows automatically. Use `ArrayList<Type>` with wrapper types.

Access items by position

Get an item at a specific index.

GetItem.java
import java.util.ArrayList;
import java.util.Arrays;

public class GetItem {
    public static void main(String[] args) {
        // Initialize cart with items
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Butter")
        );
        
        System.out.println("=== Shopping Cart ===");
        System.out.println("Cart: " + cart);
        System.out.println("Total items: " + cart.size());
        
        // Access items by index
        int index = ;
        
        System.out.println("\n=== Access by Index ===");
        System.out.println("First item (index 0): " + cart.get(0));
        System.out.println("Last item (index " + (cart.size()-1) + "): " + 
            cart.get(cart.size() - 1));
        
        // Safe access with bounds check
        if (index >= 0 && index < cart.size()) {
            System.out.println("Item at index " + index + ": " + cart.get(index));
        } else {
            System.out.println("Index " + index + " is out of bounds!");
            System.out.println("Valid indices: 0 to " + (cart.size() - 1));
        }
        
        // Display all with indices
        System.out.println("\n=== Cart with Indices ===");
        for (int i = 0; i < cart.size(); i++) {
            System.out.println("[" + i + "] " + cart.get(i));
        }
    }
}
import java.util.ArrayList;
import java.util.Arrays;

public class GetItem {
    public static void main(String[] args) {
        // Initialize cart with items
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Butter")
        );
        
        System.out.println("=== Shopping Cart ===");
        System.out.println("Cart: " + cart);
        System.out.println("Total items: " + cart.size());
        
        // Access items by index
        int index = ;
        
        System.out.println("\n=== Access by Index ===");
        System.out.println("First item (index 0): " + cart.get(0));
        System.out.println("Last item (index " + (cart.size()-1) + "): " + 
            cart.get(cart.size() - 1));
        
        // Safe access with bounds check
        if (index >= 0 && index < cart.size()) {
            System.out.println("Item at index " + index + ": " + cart.get(index));
        } else {
            System.out.println("Index " + index + " is out of bounds!");
            System.out.println("Valid indices: 0 to " + (cart.size() - 1));
        }
        
        // Display all with indices
        System.out.println("\n=== Cart with Indices ===");
        for (int i = 0; i < cart.size(); i++) {
            System.out.println("[" + i + "] " + cart.get(i));
        }
    }
}

Use get(index) to retrieve items. Index starts at 0.

Remove items from cart

Remove items by value or by index.

RemoveItem.java
import java.util.ArrayList;
import java.util.Arrays;

public class RemoveItem {
    public static void main(String[] args) {
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Milk", "Butter")
        );
        
        System.out.println("=== Initial Cart ===");
        System.out.println(cart);
        
        // Remove by value (removes first occurrence)
        String toRemove = "Milk";
        boolean removed = cart.remove(toRemove);
        System.out.println("\nRemove \"" + toRemove + "\": " + removed);
        System.out.println("Cart: " + cart);
        System.out.println("Note: Second 'Milk' still there!");
        
        // Remove by index
        int removeIndex = 1;
        String removedItem = cart.remove(removeIndex);
        System.out.println("\nRemoved at index " + removeIndex + ": " + removedItem);
        System.out.println("Cart: " + cart);
        
        // Try to remove non-existent item
        String notInCart = "Pizza";
        boolean result = cart.remove(notInCart);
        System.out.println("\nRemove \"" + notInCart + "\": " + result);
        
        // Remove all remaining items
        System.out.println("\n=== Clearing Cart ===");
        System.out.println("Before clear: " + cart.size() + " items");
        cart.clear();
        System.out.println("After clear: " + cart.size() + " items");
        System.out.println("Cart is empty: " + cart.isEmpty());
    }
}

remove("item") by value, remove(0) by index. Returns the removed element.

Check if item exists

Test whether an item is in the list.

ContainsCheck.java
import java.util.ArrayList;
import java.util.Arrays;

public class ContainsCheck {
    public static void main(String[] args) {
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Butter")
        );
        
        System.out.println("=== Shopping Cart ===");
        System.out.println(cart);
        
        // Check if item exists
        String searchItem = ;
        
        System.out.println("\n=== Membership Check ===");
        if (cart.contains(searchItem)) {
            System.out.println("✓ \"" + searchItem + "\" is in the cart");
            
            // Find its position
            int position = cart.indexOf(searchItem);
            System.out.println("  Position: index " + position);
        } else {
            System.out.println("✗ \"" + searchItem + "\" is NOT in the cart");
            System.out.println("  Would you like to add it?");
        }
        
        // Check multiple items
        System.out.println("\n=== Shopping List Check ===");
        String[] shoppingList = {"Milk", "Eggs", "Cheese", "Bread", "Yogurt"};
        
        ArrayList<String> needToBuy = new ArrayList<>();
        ArrayList<String> alreadyHave = new ArrayList<>();
        
        for (String item : shoppingList) {
            if (cart.contains(item)) {
                alreadyHave.add(item);
            } else {
                needToBuy.add(item);
            }
        }
        
        System.out.println("Already in cart: " + alreadyHave);
        System.out.println("Still need to buy: " + needToBuy);
    }
}
import java.util.ArrayList;
import java.util.Arrays;

public class ContainsCheck {
    public static void main(String[] args) {
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Butter")
        );
        
        System.out.println("=== Shopping Cart ===");
        System.out.println(cart);
        
        // Check if item exists
        String searchItem = ;
        
        System.out.println("\n=== Membership Check ===");
        if (cart.contains(searchItem)) {
            System.out.println("✓ \"" + searchItem + "\" is in the cart");
            
            // Find its position
            int position = cart.indexOf(searchItem);
            System.out.println("  Position: index " + position);
        } else {
            System.out.println("✗ \"" + searchItem + "\" is NOT in the cart");
            System.out.println("  Would you like to add it?");
        }
        
        // Check multiple items
        System.out.println("\n=== Shopping List Check ===");
        String[] shoppingList = {"Milk", "Eggs", "Cheese", "Bread", "Yogurt"};
        
        ArrayList<String> needToBuy = new ArrayList<>();
        ArrayList<String> alreadyHave = new ArrayList<>();
        
        for (String item : shoppingList) {
            if (cart.contains(item)) {
                alreadyHave.add(item);
            } else {
                needToBuy.add(item);
            }
        }
        
        System.out.println("Already in cart: " + alreadyHave);
        System.out.println("Still need to buy: " + needToBuy);
    }
}

contains() returns boolean. Useful before processing.

contains Membership test: `list.contains("item")`. Returns true/false.

Loop through all items

Iterate over all elements in the ArrayList.

IterateAll.java
import java.util.ArrayList;
import java.util.Arrays;

public class IterateAll {
    public static void main(String[] args) {
        ArrayList<String> cart = new ArrayList<>(
            Arrays.asList("Coffee", "Milk", "Bread", "Eggs", "Butter")
        );
        double[] prices = {4.99, 3.49, 2.99, 5.99, 4.49};
        
        System.out.println("=== Shopping Cart ===\n");
        
        // Method 1: Enhanced for-each (most common)
        System.out.println("1. For-each loop:");
        for (String item : cart) {
            System.out.println("   • " + item);
        }
        
        // Method 2: Index-based (when you need position)
        System.out.println("\n2. Index-based loop (with prices):");
        double total = 0;
        for (int i = 0; i < cart.size(); i++) {
            System.out.printf("   %d. %-10s $%.2f%n", i+1, cart.get(i), prices[i]);
            total += prices[i];
        }
        System.out.printf("   Total: $%.2f%n", total);
        
        // Method 3: forEach with lambda (Java 8+)
        System.out.println("\n3. forEach with lambda:");
        cart.forEach(item -> System.out.println("   → " + item));
        
        // Method 4: forEach with method reference
        System.out.println("\n4. Method reference:");
        cart.forEach(System.out::println);
        
        // Bonus: Iterate with index using forEach
        System.out.println("\n5. Indexed forEach (manual counter):");
        int[] counter = {0};  // Array trick for lambda
        cart.forEach(item -> {
            System.out.println("   [" + counter[0] + "] " + item);
            counter[0]++;
        });
    }
}

Use for-each: for (String item : cart). Cleaner than index-based loops.

Exercise: ArraylistIntegers.java

Work with ArrayList<Integer> and wrapper classes