Wesner's thoughts on Collection versus List
Sponsored By
Wesner offers his thoughts on my question, What's the difference between System.Collections.Generic.Collection and System.Collections.Generic.List?
I think there are two possible reasons.
- Collection<T> appears to be a replacement for CollectionBase, which provided virtual methods to detect insertions, deletions and changes.
- The new List class no longer provides any virtual methods as did the original ArrayList for performance reasons..
[Wesner Moise]
He also educates us on some of the differences between List<T> and the 2.0 ArrayList.
- List<T> does not use any virtual methods. As a result, a number of methods such as the list indexer methods can now be inlined.
- With the default constructor, List<T> and Whidbey ArrayList do not allocate any memory for its items, so an empty list represents a very compact object--comparable in size to an empty array. (8 bytes for Array, 12 bytes for List, 16 bytes for Whidbey ArrayList) It uses the empty array trick that I wrote about in an earlier post. In contrast, earlier versions of ArrayList would allocate space for 16 items by default.
- The initial buffer size when an item is actually added is 4 items not 16 as before.
- List<T> returns an struct-based enumerator, so that iterating through foreach now involves no memory allocations at all.
[Wesner Moise]
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Comments are closed.
http://blogs.msdn.com/bclteam/archive/2004/07/29/201059.aspx
In particular,
"System.Collections namespace now contains collections intended for scenarios where a collection needs to be exposed from an object model. For example Directory.Files property returning a collection of files in a directory. The collections are called Collection[T], ReadOnlyCollection[T], and KeyedCollection[K,T]."
BTW, I replaced the lt/gt with square brackets because the site gave me a request validation exception message when I saved the comment.