Каковы различия C# и реализации Java универсального класса Списка?
Ну, в Java List
- это интерфейс, для начала :)
Самое важное различие между этими двумя - это различие между C# и Java generics для начала: в Java generics в основном выполняют проверки во время компиляции и включают некоторые метаданные в generic поля и т.д. - но фактический объект не знает свой generic тип во время выполнения. Вы не можете спросить у List>
, что это за тип, другими словами. Любые ссылки на параметр общего типа в реализации действуют как Object
, в основном - так что ArayList
действительно поддерживается Object[]
. В C# вся информация также доступна во время выполнения - так List
поддерживается string[]
.
Аналогично C# generics допускает аргументы типа значения, поэтому вы можете иметь List
в C#, но не в Java.
Есть и другие различия в плане дисперсии и т.д. - но это уже далеко от List
.
Что касается просто ArrayList
(Java) и List
(.NET), то пара различий:
ArrayList
растет путем умножения текущей емкости на 3/2; . В NET List
удваивает текущую емкостьКонечно, есть и другие различия в плане используемых API - если бы вы могли дать больше информации о том, какие различия вас интересуют, мы могли бы помочь больше.
Вы спрашиваете о различиях в их API или в их базовой реализации? Я считаю, что дженерики в Java реализуются полностью через компилятор - JVM не имеет понятия о дженериках. Для C# дженерики являются встроенной концепцией среды выполнения .Net. В Википедии есть хорошее сравнение этих двух концепций: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics