Arrays & Collections
ArrayList
Dynamic Lists
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.
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.
Access items by position
Get an item at a specific index.
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.
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.
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.
Loop through all items
Iterate over all elements in the ArrayList.
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