2010-03-21 18 views
9

Quali sono le differenze delle implementazioni C# e Java della classe List generica?C# vs Java - Elenchi generici

+3

Bene, per esempio, List (http://java.sun.com/javase/7/docs/api/java/util/List.html) è un'interfaccia in Java, non una classe. L'equivalente di Java alla classe List generica C# è ArrayList

+0

sebbene un po 'datato, sembra interessante: http://www.artima.com/intv/generics.html – Zaki

risposta

4

Stai chiedendo differenze nella loro API o nella loro implementazione sottostante? Credo che i generici Java siano implementati completamente tramite il compilatore - la JVM non ha nozioni di generici. Per C#, i generici sono un concetto integrato del runtime .Net. Wikipedia sembra avere un buon confronto tra i due: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics

30

Ebbene, in Java List<T> è un'interfaccia, per iniziare con :)

La differenza più importante tra i due è la differenza tra C# e Java generici a Iniziamo con: in Java i generici eseguono fondamentalmente controlli in fase di compilazione e includono alcuni metadati in campi generici, ecc. ma l'oggetto non conosce il suo tipo generico al momento dell'esecuzione. Non puoi chiedere a List<?> cosa? è, in altre parole. Qualsiasi riferimento a un parametro di tipo generico nell'atto di implementazione è Object, in pratica, quindi uno ArayList<String> è supportato da uno Object[]. In C# tutte le informazioni sono disponibili anche al momento dell'esecuzione - quindi un List<string> è supportato da un string[].

Analogamente i generici C# consentono argomenti tipo tipo valore, quindi è possibile avere uno List<int> in C# ma non in Java.

Ci sono ulteriori differenze in termini di varianza ecc., Ma questo si sta spostando molto lontano da List<T>.

In termini di soloArrayList<T> (Java) e List<T> (NET), un paio di differenze:

  • Java elenca Override è uguale a/hashCode, mentre non lo fanno in .NET
  • ArrayList<T> cresce moltiplicando la capacità corrente di 3/2; di .NET List<T> raddoppia la capacità corrente invece

Naturalmente ci sono altre differenze in termini di API esposte - se potesse dare maggiori informazioni sul tipo di differenza che ti interessa, potremmo aiutare di più.

+0

E mi ricordo di aver chiesto perché otterresti sempre upvotes @ meta. Bella risposta. –

+0

Ma l'elenco C# è un'implementazione di lista, mi chiedo se dovrei usare IList <__> ovunque perché dovrei sempre programmare un'interfaccia, non un'implementazione. Sto vedendo un sacco di codice C# utilizzare Elenco specifico come tipi di ritorno che è sbagliato. Se qualcuno decide di utilizzare un'implementazione diff di IList, deve cambiare più di 1 posto. – Skychan