Я работаю над улучшением платформ в своей компании и во время своих исследований, я столкнулся с множеством комментариев от людей, говорящих, что следует избегать ArrayLists. Тем не менее, они никогда не давали много объяснений, почему и я не могу найти статей о том, почему они так ужасны.Что плохого в ArrayLists?
ответ
«Arraylists» (также иногда называемые «векторами») - это прекрасные структуры данных; просто ArrayList
- это класс, которого следует избегать в C#.
Причина в том, что он не является общим, поэтому вы можете хранить в нем любые object
, нарушая безопасность.
Используйте вместо этого List<T>
.
Это хорошее объяснение и ответ, но немного дальше ясность в том, что ArrayList позволит вам одновременно хранить несколько типов объектов в одном массиве ArrayList. Это означает, что вы можете хранить строки, int, object и т. Д. Все в одном массиве ArrayList, поэтому вам нужно иметь дело с тем, чтобы сохранить сохраненный тип данных перед хранением или проверить тип на выходе. В любом случае это больше подходит программисту. Дженерики просто легче, потому что они автоматически набирают безопасность. –
Что делать, если вы хотите, чтобы несколько типов объектов находились в одном списке? Вы пишете игру «Астероиды» и хотите сохранить все астероиды, пули, космические корабли и т. Д. В одном списке GameObjects? Предположительно, arraylist будет в порядке, и вы можете запускать операции, перейдя через ArrayList и делая if (ArrayList [i] Is SomeInterface) ...? – NibblyPig
SLC все равно будет лучше. Либо сохраните его как List
Потому что они не сильно типизированы. Это сумка, в которой можно хранить что угодно. Это означает, что вам нужно отбрасывать при извлечении элементов. Это также означает, что может быть или не быть бокс/unboxing, участвующих в хранении и извлечения значений.
Да, я понимаю. Как насчет влияния на производительность? Как производительность HashSet сравнивается с ArrayList? – user2460328
Зависит от того, что вы с ним делаете. Бокс и распаковка много дорого. –
@ user2460328 Вы не должны сравнивать их вообще. «Список» точно такой же, как «ArrayList», но лучше. Если вам нужна структура на основе списка, вы используете «Список». Вопрос о том, следует ли использовать «HashSet» или «Список» (который является действительным) полностью отделен от этого обсуждения и основан на типе данных, которые у вас есть и как вы планируете использовать его. – Servy
Они не являются общими. A List
- это точно то же самое, но оно общее. Это означает, что вы обеспечиваете, чтобы все объекты были общего типа, и это ограничение выполняется компилятором. Он также избегает бокса типов значений.
Это не так страшно, как больно. Подумайте о них как о List, вроде, ish.
Таким образом, вы должны добавить много правил для обеспечения согласованности в коллекции и использовать их «везде» или иметь дело с ошибками, которые являются результатом не имея согласованности, «везде»
Так что многие дополнительные кода, или вы сильно скрестите пальцы и надеетесь, что программист «тупика» никогда не ставит что-то там, с которым вы не можете справиться.
Если ваша коллекция может состоять из чего угодно, то придерживайтесь ее, хотя лично я бы сказал, что если бы это произошло, то почти наверняка был какой-то главный недостаток дизайна.
- 1. Что плохого в Javascript
- 2. Что плохого в OverlappingInstances?
- 3. Что в этом плохого?
- 4. Что в этом плохого?
- 5. Что плохого MySQL Trigger
- 6. Что плохого с массивом?
- 7. Что в этом плохого? C
- 8. Что плохого в этом ЗЕЬЕСТ
- 9. Что плохого в этом заявлении
- 10. JCL что в этом плохого?
- 11. Что плохого в шаблоне Haskell?
- 12. Что плохого в этом списке
- 13. Что плохого в регулярном выражении
- 14. Что плохого в моем запросе
- 15. Что плохого в этой схеме?
- 16. Вставка ArrayLists в ArrayLists
- 17. Что плохого сценария Java SetTimeout
- 18. что плохого в пост-приращение в блоке
- 19. Что такое ошибка Java ArrayLists
- 20. Что плохого в этом простом Makefile
- 21. C Указатели Пример. Что в этом плохого?
- 22. Что плохого в preg_match ("/ \ <script\>
- 23. C++ Code: Что в этом плохого?
- 24. Что плохого в обращении с XML?
- 25. Неопределенная ошибка индекса. Что в этом плохого?
- 26. Что плохого в xsl: for-each?
- 27. Что плохого в анализе данных json?
- 28. Что плохого в Java для цикла
- 29. Что плохого в использовании SQL INNER JOIN
- 30. Что плохого в этом методе TextWriter?
Потому что они не являются универсальными в C#. http://en.csharp-online.net/CSharp_Generics_Recipes%E2%80%94Replacing_the_ArrayList_with_Its_Generic_Counterpart –
Также вы не можете использовать его в Silverlight – Dilshod
http://stackoverflow.com/questions/2309694/arraylist-vs-list-in- c-sharp – PeskyGnat