tags:

views:

126

answers:

2

What are the differences of the C# and Java implementations of the generic List class?

+3  A: 

Are you asking for differences in their API or their underlying implementation? I believe Java generics are implemented completely via the compiler -- the JVM has no notion of generics. For C#, generics are a built-in concept of the .Net runtime. Wikipedia seems to have a good comparison of the two: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics

Skeets
+10  A: 

Well, in Java List<T> 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<String> is really backed by an Object[]. In C# all the information is available at execution time too - so a List<string> is backed by a string[].

Similarly C# generics allow value type type arguments, so you can have a List<int> in C# but not in Java.

There are further differences in terms of variance etc - but this is moving a long way from List<T>.

In terms of just ArrayList<T> (Java) and List<T> (.NET), a couple of differences:

  • Java lists override equals/hashCode, whereas they don't in .NET
  • ArrayList<T> grows by multiplying the current capacity by 3/2; .NET's List<T> doubles the current capacity instead

Of 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.

Jon Skeet
And I remember asking why you would always get upvotes @ meta. Great answer.
Ravi Wallau