Some data is a grid, not a list: a matrix, a chessboard, seats in a hall. A 2D array stores it as rows and columns so you can reach any cell with grid[r][c]. Use it for matrix problems and grid traversals like counting islands. In Java each row is its own array, so rows can have different lengths, which surprises people coming from C.