c # equivalente para vetor c ++ ou deque

Tenho quase certeza de que isso deve ser uma duplicata, mas procurei por algum tempo e não consegui encontrar a resposta. O que devo usar em C # para substituir o vetor C ++ e o dequeeficientemente. Ou seja, eu preciso de uma estrutura que suporte eficientemente a indexação direta e também apóie a exclusão de uma ou ambas as extremidades (dependendo do vetor ou do caso deque) novamente de uma maneira eficiente.

Em java eu ​​costumo usar ArrayList pelo menos para o vetor, mas para C # eu encontreiesta fonte que afirma:ArrayList resizes dynamically. As elements are added, it grows in capacity to accommodate them. It is most often used in older C# programs.. Então, qual é a nova maneira de fazer isso? E mais uma vez o que eu faço para o caso deque?