2010-03-21 15 views
9

Was sind die Unterschiede der C# - und Java-Implementierungen der generischen List-Klasse?C# vs Java - Generische Listen

+3

Nun, zum einen ist List (http://java.sun.com/javase/7/docs/api/java/util/List.html) eine Schnittstelle in Java, keine Klasse. Java entspricht der C# generischen List Klasse ist ArrayList

+0

obwohl etwas veraltet, scheint interessant: http://www.artima.com/intv/generics.html – Zaki

Antwort

4

Fragen Sie nach Unterschieden in ihrer API oder der zugrunde liegenden Implementierung? Ich glaube, dass Java-Generika vollständig über den Compiler implementiert werden - die JVM hat keine Vorstellung von Generika. Für C# sind Generika ein integriertes Konzept der .NET-Laufzeit. Wikipedia scheint einen guten Vergleich der beiden haben: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics

30

Nun, in Java List<T> eine Schnittstelle, mit :)

Der wichtigste Unterschied zwischen den beiden ist der Unterschied zwischen C# und Java Generics beginnen Beginnen mit: In Java führen Generics im Grunde Kompilierzeitprüfungen durch und enthalten einige Metadaten in generischen Feldern usw. - aber das tatsächliche Objekt kennt seinen generischen Typ zur Ausführungszeit nicht. Sie können nicht fragen, List<?> was das? ist mit anderen Worten. Beliebige Verweise auf einen generischen Typparameter in der Implementierung wirken grundsätzlich wie Object - so wird ein ArayList<String> wirklich von einem Object[] unterstützt. In C# sind alle Informationen zur Ausführungszeit ebenfalls verfügbar - so wird eine List<string> durch eine string[] unterstützt.

In ähnlicher Weise erlauben C# -Generien Werttyp-Argumente, so dass Sie in C# List<int> haben können, aber nicht in Java.

Es gibt weitere Unterschiede in Bezug auf die Varianz usw. - aber dies ist ein weiter Weg von List<T>.

In Bezug auf die nurArrayList<T> (Java) und List<T> (.NET), ein paar Unterschiede:

  • Java listet Überschreibung gleich/hashCode, während sie .NET nicht in tun
  • ArrayList<T> wächst durch Multiplizieren der aktuellen Kapazität mit 3/2; .NET ist List<T> verdoppelt die aktuelle Kapazität statt

Natürlich gibt es noch andere Unterschiede in Bezug auf die APIs ausgesetzt - wenn Sie mehr Informationen über die Art der Unterschied geben könnte Sie interessiert sind, könnten wir mehr helfen.

+0

Und ich erinnere mich zu fragen, warum Sie immer upvotes @ meta bekommen würde. Gute Antwort. –

+0

Aber C# -Liste ist eine Liste Implementierung, ich frage mich, ob ich IList <__> überall verwenden sollte, weil ich immer auf eine Schnittstelle programmieren sollte, nicht eine Implementierung. Ich sehe viele C# -Code verwenden spezifische Liste als Rückgabetypen, die falsch ist. Wenn jemand entscheidet, eine Diff-Implementierung von IList zu verwenden, muss sich mehr als 1 Platz ändern. – Skychan