Expert-authored Java study guides covering the redesigned 2025–26 curriculum: objects and methods, control structures, class creation, and data collections — including arrays, ArrayLists, and 2D arrays.
Major Curriculum Redesign — Fall 2025
The May 2026 exam is the first to test the new 4-unit curriculum.
The old 10-unit structure was replaced with 4 integrated units. Inheritance, polymorphism, the super keyword, and recursive method writing have been removed from the exam. Pre-2026 FRQs test the old curriculum; use them for practice but note that inheritance-heavy questions are no longer exam-relevant. New additions: File I/O with Scanner, expanded ArrayList methods (contains(), indexOf()), and fully digital submission via Bluebook.
42 questions · 90 minutes · 4 answer choices · no calculator.
Question types: code tracing and output prediction (37–53% of all questions — the dominant type), error identification, algorithm comparison, Roman-numeral statement evaluation, and conceptual understanding. No coding on MCQ — all code is already written and you analyze it.
4 questions · 90 minutes · typed directly in Bluebook · Java Quick Reference provided on-screen. Total: 25 raw points.
No calculator; no compiler — write correct, compilable Java from memory. Each rubric point is awarded for a specific, deterministic code element (correct method header, correct loop structure, correct conditional, etc.).
ArrayList — traversal, searching, filtering, adding/removing during iteration. (Prior years included array variants; 2026+ is ArrayList-only.)Composite Score Formula
Composite (0–100) = (MCQ correct ÷ 42 × 55) + (FRQ points ÷ 25 × 45). Approximately: 5 needs ~78+, 4 needs ~60+, 3 needs ~45+.
int, double, boolean · Variable declaration and assignment · Arithmetic operators, integer division, modulo · Calling methods with dot notation · Constructor calls with new · String methods: length(), substring(), indexOf(), equals(), compareTo() · Math methods: abs(), pow(), sqrt(), random() · Wrapper classes: Integer, Double · Autoboxing and unboxing · System.out.println()&&, ||, ! · De Morgan's Laws · if / else if / else · Nested conditionals · while loops and termination conditions · for loops and loop control · Infinite loop detection · String traversal with index-based loops · Nested loops and output patterns · Compound assignment: +=, -=, *=private instance variables · Access modifiers: public and private · Default and parameterized constructors · Instance methods: getters, setters, behavior methods · static vs. instance context · The this keyword · Implementing toString() and equals() · Method overloading · Note: Inheritance and polymorphism removed from 2026+ examArrayList<E>: add(), remove(), get(), set(), size(), contains(), indexOf() · Safe ArrayList removal during iteration (backward traversal) · 2D array: row-major and column-major traversal, boundary conditions, in-place mutation · File reading: java.io.File and java.util.Scanner (nextLine(), nextInt(), hasNextLine()) · Recursion tracing (required; writing recursive methods not required)The majority of MCQ questions are code-tracing and output-prediction tasks. Practice tracing through nested loops, conditional branches, and ArrayList mutations by hand — without running the code.
Key trap: integer division. In Java, 7 / 2 = 3, not 3.5. The modulo operator 7 % 2 = 1. These appear constantly on MCQ.
Know both directions:
!(A && B) == (!A || !B)
!(A || B) == (!A && !B)
Removing elements while iterating forward skips items. The correct patterns:
// Pattern 1: backward for loop
for (int i = list.size()-1; i >= 0; i--) {
if (condition) list.remove(i);
}
// Pattern 2: index management
int i = 0;
while (i < list.size()) {
if (condition) list.remove(i);
else i++;
}
// Row-major (outer=row, inner=col)
for (int r = 0; r < arr.length; r++)
for (int c = 0; c < arr[0].length; c++)
// process arr[r][c]
// Column-major (outer=col, inner=row)
for (int c = 0; c < arr[0].length; c++)
for (int r = 0; r < arr.length; r++)
// process arr[r][c]
Math.random() range formulaMath.random() returns a double in [0.0, 1.0). To get a random integer in range [min, max]:
int n = (int)(Math.random() * (max - min + 1)) + min;
This appears on almost every exam in some form.
n = 93,217 · Mean: 3.18 · The high rate of 1s (22%) reflects students without prior coding experience. Students with prior coding backgrounds typically score 4 or 5.
AP Central provides 3 recent years publicly. An archive of ~82 FRQs (2004–2025) exists via official College Board URLs. Note: pre-2026 FRQs test the old 10-unit curriculum including inheritance; tag them accordingly.
Our worked solutions and practice questions are original instructional content created by Tian2 AP. They are aligned to the concepts and skills described in College Board’s Course and Exam Description and are not reproductions of, or affiliated with, College Board’s official materials.