What are the differences of the C# and Java implementations of the generic List class?
Well, in Java List
is an interface, to start with :)
The most important difference between the two is the difference between C# and Java generics to start with: in Java generics basically perform compile-time checks and include some metadata in generic fields etc - but the actual object doesn't know its generic type at execution time. You can't ask a List>
what that ? is, in other words. Any references to a generic type parameter in the implementation act as Object
, basically - so a ArayList
is really backed by an Object[]
. In C# all the information is available at execution time too - so a List
is backed by a string[]
.
Similarly C# generics allow value type type arguments, so you can have a List
in C# but not in Java.
There are further differences in terms of variance etc - but this is moving a long way from List
.
In terms of just ArrayList
(Java) and List
(.NET), a couple of differences:
ArrayList
grows by multiplying the current capacity by 3/2; .NET's List
doubles the current capacity insteadOf course there are other differences in terms of the APIs exposed - if you could give more information about the kind of difference you're interested in, we could help more.