How to define a two-dimensional array?
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
A two-dimensional array stores values in rows and columns, which makes it a natural fit for tables, grids, game boards, and matrix-style data. In most languages, a 2D array is really an array whose elements are themselves arrays, so understanding shape and indexing matters as much as syntax.
Declaring the Array
The basic idea is to choose how many rows and columns you need, then allocate storage for both dimensions. In languages with fixed-size arrays, you often declare the full shape up front. In languages with dynamic lists, each row can be created separately.
Here is a Java example:
matrix[3][4] means three rows and four columns. The first index selects the row, and the second index selects the column inside that row.
In Python, the common equivalent is a list of lists:
The syntax is different, but the mental model is the same.
Initializing with Values
If you already know the contents, literal initialization is clearer than creating an empty grid and filling it later. That is especially true for examples, lookup tables, or test data.
This style makes the shape visible at a glance. It also reduces mistakes when the grid is small enough to read directly.
When you need a default value everywhere, create each row carefully. In JavaScript, this is a common safe pattern:
The callback creates a fresh inner array for every row. That detail matters because reusing the same inner array produces surprising shared updates.
Traversing Rows and Columns
Once the array exists, the next task is usually traversal. A nested loop is the standard solution because you need to visit each row and then each column within that row.
Notice the use of values[row].length instead of assuming every row has the same length. That makes the code work even when the structure is jagged.
Rectangular Versus Jagged Shapes
Not every 2D array is a perfect rectangle. In Java and JavaScript, each row can have a different length, which creates a jagged array. That is useful for triangular data, sparse layouts, or inputs where each row naturally holds a different number of items.
If your algorithm expects a rectangular matrix, validate the row lengths first. Otherwise, an index that exists in one row may fail in another.
Common Pitfalls
One frequent mistake is swapping the meaning of the indices. matrix[row][col] and matrix[col][row] are not interchangeable, and the bug can remain hidden if the matrix is square.
Another common issue is using the same inner array for every row in JavaScript. Code like new Array(3).fill(new Array(4).fill(0)) creates shared rows, so updating one cell updates the same column in every row.
Developers also get tripped up by jagged structures. In Java, array.length gives the number of rows, but array[row].length gives the number of columns in that specific row. Using the wrong length causes out-of-bounds errors.
Finally, do not confuse a list of lists with a mathematically dense matrix. They may look similar, but memory layout, performance, and supported operations depend on the language and library you use.
Summary
- A two-dimensional array represents data with both row and column indices.
- In many languages, a 2D array is implemented as an array of arrays.
- Use literal initialization when the starting values are already known.
- Traverse a 2D array with nested loops, and use the current row length when needed.
- Be careful with jagged arrays and shared inner arrays, especially in JavaScript.
Related reading
- How to define a two-dimensional array?
- How to define byte[] and LocalDateTime in avro schema?
- How to define hash tables in Bash?
- How to define max_queue_size, workers and use_multiprocessing in keras fit_generator?
- How to define max_queue_size, workers and use_multiprocessing in keras fit_generator?
- How to define object in array in Mongoose schema correctly with 2d geo index
- How to delete a queue in rabbit mq
- How to delete an element from an array in C

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.