List<T> are implemented internally as arrays that are resized as required. So access is linear, but adding may require a reallocation and copy. So they are really vectors.
Dictionary<k,t> are implemented as hash tables.
The current version of C# also has Span<T> which is stack allocated memory buffer.