Arrays
In short: A data structure that stores several values of the same type in a contiguous, fixed-size memory area — access to each element happens via its index.
In more detail: Because the size of an array has to be fixed from the start in most languages, arrays are very fast to access, but inflexible when the number of elements needs to change at runtime — for that there are dynamically growing structures like Java’s ArrayList (see Dynamic Array). Multidimensional arrays extend the principle to tables or grids (arrays of arrays).
In Depth
The reason for the fixed size lies in memory organisation: an array reserves a contiguous block of memory from the start, whose size results from element count × element size. This exact contiguous, predictable layout is the reason why access to any element via index is possible in constant time (O(1), see Algorithms) — the memory address of an element can be calculated directly, with no need to search the structure.
numbers = [10, 20, 30, 40, 50]
numbers[2] # 30 - direct access, independent of the array's size
numbers[2] = 99 # changing an element is also O(1)This efficiency has its price: inserting or deleting an element in the middle requires shifting all subsequent elements (O(n)) — and changing the size afterwards isn’t possible at all for a classic array. This is exactly why almost all languages build a more convenient, dynamically growing structure on top of it (ArrayList in Java, list in Python, Array/dynamic array in JavaScript), which internally manages an array and automatically creates a larger new array and copies the data over when needed — visible to the user as an “unboundedly growing list”. More on this under Dynamic Array.
Another important point: all elements of an array have to have the same data type (enforced by the compiler in typed languages). This isn’t a coincidence, it’s necessary so that every element occupies exactly the same amount of memory — only that way can the address of array[i] be calculated directly from i.
Multidimensional arrays (e.g. for chessboards, image data, or matrices) are basically nothing other than “arrays of arrays” — a two-dimensional array is an array whose individual elements are themselves arrays again.
See also: Index, Multidimensional Arrays, Dynamic Array, Data Structures