C#和Java的泛型List类的实现有何区别?
嗯,在Java中,List<T>
是一个接口,首先要说的就是这个。
两者之间最重要的区别是C#和Java泛型的区别:在Java中,泛型基本上执行编译时检查,并在泛型字段等中包含一些元数据 - 但实际的对象在执行时不知道它的泛型类型。换句话说,你不能询问List<?>
它是什么?在实现中对泛型类型参数的任何引用都像Object
一样 - 因此,ArayList<String>
实际上由Object[]
支持。在C#中,所有信息在执行时也都可用 - 所以List<string>
由string[]
支持。
类似地,C#泛型允许值类型类型参数,因此您可以在C#中拥有一个List<int>
,但在Java中不行。
在方差等方面还有进一步的差异-但这与List<T>
相去甚远。
就ArrayList<T>
(Java)和List<T>
(.NET)而言,有以下几点不同:
ArrayList<T>
通过将当前容量乘以3/2来增长; .NET的List<T>
则将当前容量加倍当然,在公开的API方面也有其他不同-如果您可以提供更多有关所感兴趣的差异类型的信息,我们可以提供更多帮助。