An adjacency list is a data structure that stores graphs in memory by storing a list of neighbors for each node. Adjacency lists are suitable when there are many nodes but not many connections. It is easy to add edges but costly to remove edges. When the graph is dense (i.e. has many connections), it is better to use an adjacency matrix.