C#の話なんですが

arrayとArrayList型とList型と、
HashtableクラスとDictionaryクラスと
なんで似たようなのがこんなにいっぱいあるんでしょうか

調べた限りでは、
 array: 要素数変更の際には再定義してまるごとコピーし無くてはならない。×
 ArrayList: 非ジェネリッククラスなので使うべきではない×
 List: おすすめ○

 Hashtable: 非ジェネリッククラスなので〜×
 Dictionary: おすすめ○

こんな認識なんですが
例えばarrayが活躍するような状況ってあるんでしょうか。
単にレガシーなだけですか?