C# по сравнению с Java - универсальные списки

Каковы различия C# и реализации Java универсального класса Списка?

11
задан Kevin 21 March 2010 в 06:57
поделиться

2 ответа

Ну, в 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), то пара различий:

  • Списки Java переопределяют equals/hashCode, тогда как в .NET этого нет
  • ArrayList растет путем умножения текущей емкости на 3/2; . В NET List удваивает текущую емкость

Конечно, есть и другие различия в плане используемых API - если бы вы могли дать больше информации о том, какие различия вас интересуют, мы могли бы помочь больше.

32
ответ дан 3 December 2019 в 01:51
поделиться

Вы спрашиваете о различиях в их API или в их базовой реализации? Я считаю, что дженерики в Java реализуются полностью через компилятор - JVM не имеет понятия о дженериках. Для C# дженерики являются встроенной концепцией среды выполнения .Net. В Википедии есть хорошее сравнение этих двух концепций: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Generics

4
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: