Some of the generic types have functionality that is not found in the nongeneric collection types. For example, the List<(Of <(T>)>) class, which corresponds to the nongeneric ArrayList class, has a number of methods that accept generic delegates, such as the Predicate<(Of <(T>)>) delegate that allows you to specify methods for searching the list, the Action<(Of <(T>)>) delegate that represents methods that act on each element of the list, and the Converter<(Of <(TInput, TOutput>)>) delegate that lets you define conversions between types.
The List<(Of <(T>)>) class allows you to specify your own IComparer<(Of <(T>)>) generic interface implementations for sorting and searching the list. The SortedDictionary<(Of <(TKey, TValue>)>) and SortedList<(Of <(TKey, TValue>)>) classes also have this capability, and in addition allow the comparers to be specified when the collection is created. In similar fashion, the Dictionary<(Of <(TKey, TValue>)>) and KeyedCollection<(Of <(TKey, TItem>)>) classes allow you to specify your own equality comparers.