C#与Java - 通用列表

Kev*_*vin 11 c# java list

通用List类的C#和Java实现有什么不同?

Jon*_*eet 32

好吧,在Java中List<T>是一个接口,以:)开头

两者之间最重要的区别是C#和Java泛型之间的区别:Java泛型基本上执行编译时检查并在通用字段中包含一些元数据等 - 但实际对象在执行时不知道它的泛型类型时间.你不能问那是List<?>什么?换言之,是.实现中对泛型类型参数的任何引用Object基本上都是 - 所以a ArayList<String>实际上是由一个Object[].在C#中,所有信息也在执行时可用 - 因此a List<string>由a支持string[].

类似地,C#泛型允许值类型类型参数,因此您可以使用List<int>C#但不能使用Java.

在方差等方面存在进一步的差异 - 但这已经走了很长一段路List<T>.

just ArrayList<T>(Java)和List<T>(.NET)而言,有两点不同:

  • Java列表覆盖equals/hashCode,而它们不在.NET中
  • ArrayList<T>通过将当前容量乘以3/2来增长; .NET List<T>将目前的容量增加了一倍

当然,在公开的API方面还存在其他差异 - 如果您可以提供有关您感兴趣的差异类型的更多信息,我们可以提供更多帮助.


小智 4

您是否想了解他们的 API 或底层实现的差异?我相信 Java 泛型完全是通过编译器实现的——JVM 没有泛型的概念。对于 C#,泛型是 .Net 运行时的内置概念。维基百科似乎对两者有很好的比较:http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics