ArrayList FRQ Patterns - What Graders Look For (AP CSA)

FRQ 3 — Always ArrayList

ArrayList FRQ Patterns — What Graders Look For

FRQ 3 is worth 9 points. Know exactly how to earn every one of them.

AP CSA Exam: May 15, 2026. FRQ 3 is always ArrayList. This page shows you what graders check.
FRQ 3 facts: Always ArrayList. Always 2 parts (a and b). Usually 4 points for Part A and 5 for Part B. The problem involves traversing, filtering, or constructing an ArrayList of objects.

Pattern 1

Constructor That Builds an ArrayList From Data

Part A often asks you to write a constructor that populates an instance variable ArrayList from parameter data.

public class Tournament
{
    private ArrayList players;

    public Tournament(String[] names, int[] ratings)
    {
        players = new ArrayList();
        for (int i = 0; i < names.length; i++)
        {
            players.add(new Player(names[i], ratings[i]));
        }
    }
}

Grader Checklist

+1 Initialize players as new ArrayList (not redeclare as local). +1 Correct loop over parameter arrays. +1 Create new object with correct constructor args. +1 Add each object to the list.

Pattern 2

Filter and Remove From ArrayList

Part B often asks you to remove elements that meet a condition.

public void removeInactive()
{
    for (int i = players.size() - 1; i >= 0; i--)
    {
        if (!players.get(i).isActive())
        {
            players.remove(i);
        }
    }
}

Grader Checklist

+1 Correct backward traversal (or forward with index adjustment). +1 Correct condition check using accessor method. +1 Correct removal. +1 All matching elements removed (not just first). +1 No ConcurrentModificationException.

Pattern 3

Build Pairs or Groups From a List

A common Part B pattern: pair elements from both ends of the list, or group consecutive elements.

public ArrayList buildMatches()
{
    ArrayList matches = new ArrayList();
    int left = 0;
    int right = players.size() - 1;
    while (left < right)
    {
        matches.add(new Match(players.get(left), players.get(right)));
        left++;
        right--;
    }
    return matches;
}

Common Penalty Triggers

Penalty #1: Redeclaring instance variable. Writing ArrayList players = new ArrayList(); inside the constructor creates a LOCAL variable that shadows the instance field. The instance field stays null. This costs 1 point every time.
Penalty #2: Destroying persistent data. If the method is supposed to leave the original list intact but you modify it, that is a 1-point penalty. Build a new list instead of modifying the existing one when the problem says “returns” without saying “modifies.”
Penalty #3: Using for-each with removal. Even if you get the logic right, using a for-each loop that removes elements throws ConcurrentModificationException at runtime. This costs the traversal and removal points.

Get FRQ-Ready Before May 15

54.5% of my students score 5s. The Cram Kit includes daily FRQ practice with scoring breakdowns.

Get the Cram Kit — $29.99 1-on-1 Tutoring

Get in Touch

Whether you're a student, parent, or teacher — I'd love to hear from you.

Just want free AP CS resources?

Enter your email below and check the subscribe box — no message needed. Students get daily practice questions and study tips. Teachers get curriculum resources and teaching strategies.

Typically responds within 24 hours

Message Sent!

Thanks for reaching out. I'll get back to you within 24 hours.

🏫 Welcome, fellow educator!

I offer curriculum resources, practice materials, and study guides designed for AP CS teachers. Let me know what you're looking for — whether it's classroom materials, a guest speaker, or Teachers Pay Teachers resources.

Email

[email protected]

📚

Courses

AP CSA, CSP, & Cybersecurity

Response Time

Within 24 hours

Prefer email? Reach me directly at [email protected]