C#vs Java – 通用列表

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

那么,在Java List是一个接口,以:)开头

两者之间最重要的区别是C#和Javagenerics之间的区别:Javagenerics基本上执行编译时检查并在通用字段中包含一些元数据等 – 但实际对象在执行时不知道它的generics类型时间。 你不能问一个List那是什么? 换句话说,就是这样。 实现中对generics类型参数的任何引用都充当Object ,基本上 – 所以ArayList实际上是由Object[]支持的。 在C#中,所有信息也在执行时可用 – 因此Liststring[]

类似地,C#generics允许值类型类型参数,因此您可以在C#中使用List但在Java中不能。

在方差等方面存在进一步的差异 – 但这距离List还有很长的路要走。

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

  • Java列表覆盖equals / hashCode,而它们不在.NET中
  • ArrayList通过将当前容量乘以3/2而增长; .NET的List改为当前容量的两倍

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

您是否要求在API或其底层实施方面存在差异? 我相信Javagenerics是通过编译器完全实现的–JVM没有generics的概念。 对于C#,generics是.Net运行时的内置概念。 维基百科似乎对两者进行了很好的比较: http : //en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics