¿Cuáles son las diferencias de las implementaciones C# y Java de la clase List genérica?C# vs Java - Listas genéricas
Respuesta
¿Está pidiendo diferencias en su API o en su implementación subyacente? Creo que los genéricos de Java se implementan completamente a través del compilador: la JVM no tiene noción de genéricos. Para C#, los genéricos son un concepto integrado del tiempo de ejecución .Net. Wikipedia parece tener una buena comparación de los dos: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics
Bueno, en Java List<T>
es una interfaz, para empezar :)
La diferencia más importante entre los dos es la diferencia entre C# y Java genéricos a comenzar con: en los genéricos de Java básicamente se realizan verificaciones en tiempo de compilación e incluyen algunos metadatos en campos genéricos, etc., pero el objeto real no conoce su tipo genérico en el momento de la ejecución. No puedes preguntarle a List<?>
que es eso? es, en otras palabras. Cualquier referencia a un parámetro de tipo genérico en la implementación actúa como Object
, básicamente, por lo que un ArayList<String>
está realmente respaldado por un Object[]
. En C#, toda la información está disponible también en tiempo de ejecución, por lo que List<string>
está respaldado por string[]
.
De forma similar, los genéricos de C# permiten argumentos de tipo de tipo de valor, por lo que puede tener un List<int>
en C# pero no en Java.
Existen otras diferencias en términos de varianza, etc., pero esto se está moviendo muy lejos de List<T>
.
En términos de simplementeArrayList<T>
(Java) y List<T>
(NET), un par de diferencias:
- Java enumera anulación es igual a/hashCode, mientras que no lo hacen en .NET
ArrayList<T>
crece multiplicando la capacidad actual por 3/2; de .NETList<T>
duplica la capacidad actual en lugar
Por supuesto, hay otras diferencias en términos de las API expuestas - si se puede dar más información sobre el tipo de diferencia que le interesa, podríamos ayudar a más.
Y recuerdo haber preguntado por qué siempre recibiría votaciones @ meta. Gran respuesta. –
Pero C# List
- 1. ¿Cómo emitir listas genéricas dinámicamente en C#?
- 2. Comparando dos grandes listas genéricas
- 3. .NET: combinando dos listas genéricas
- 4. ¿Cómo combinar más de dos listas genéricas en C# Zip?
- 5. ¿Cómo devolver una colección de listas genéricas en C#?
- 6. Comparar dos listas genéricas y eliminar duplicados
- 7. Diccionario de listas genéricas o tipos variables
- 8. Java Play2: ¿plantillas genéricas?
- 9. Operaciones genéricas en contenedores C++
- 10. C# Múltiples restricciones genéricas
- 11. Java Collections.checked *() versus colecciones genéricas
- 12. C# vs Java generics
- 13. Genéricos vs. Matriz Listas
- 14. Python Conjuntos vs Listas
- 15. Haskell: Listas vs Streams
- 16. error de operador de conversión explícita al convertir listas genéricas
- 17. Seleccionar al azar de listas genéricas con <T>
- 18. código de Visual Studio Regla Análisis - "No exponga listas genéricas"
- 19. resultado confusa de "GetElementType" en las matrices y listas genéricas
- 20. ¿Cómo serializo un objeto con TimeSpan y listas genéricas a XML en C#?
- 21. C++ vs Java en Android
- 22. C# sellado vs Java final
- 23. Prolog es vs = con listas
- 24. Java delimitada limitaciones genéricas en los campos
- 25. Interfaces genéricas y no genéricas
- 26. Java comparar dos listas
- 27. ¿Hay formas más elegantes de manejar listas en Java? (Python VS Java)
- 28. ¿Qué son las colecciones genéricas en C#?
- 29. C# Métodos de llamada en clases genéricas
- 30. ¿Por qué usar restricciones genéricas en C#
Bueno, para empezar, List (http://java.sun.com/javase/7/docs/api/java/util/List.html) es una interfaz en Java, no una clase. El equivalente de Java a la clase de lista genérica de C# es ArrayList –
, aunque un poco anticuado, parece interesante: http://www.artima.com/intv/generics.html – Zaki