Loading...
RoYaL avatar RoYaL Trainer 6849 Точки

Здравей,

Този въпрос колкото е хубав, толкова е и абстрактен. Звучи като "Каква е разликата между ябълка и ананас". По принцип двете нямат нищо общо. В един абстрактен случай, можем да разглеждаме StringBuilder като частен случай на List (и по-точно на List<string>).

За да ти се отговори адекватно на въпроса, може би е най-добре да дадеш мотивите си, които са те докарали да се питаш каква е разликата между тях (въпреки, че аз по-скоро бих питал каква е приликата).

Основната разлика за използване е, че списъкът може да бъде генерализиран (List<T>), което означава, че може да бъде от цели числа, реални числа, низове, символи, комплексни обекти и пр. Докато StringBuilder-ът се ограничава само до низове.

Ако говорим за имплементационни детайли, то те не би трябвало много да ни интересуват. Освен, ако не гоним производителност. StringBuilder класа в C# еволюира с годините и търпи три главни пренаписвания в историята си. Ако искаме да видим как е имплементиран, защо просто не надникнем в кода му? Аналогично, можем да погледнем и кода на списъка.

Голямата разлика е, че списъкът като имплементация е надгражда масива, и е т.нар. вектор. StringBuilder-ът държи низ в себе си под формата на масив от символи. Само че определен блок от символи. Различните низови блокчета са съединени един за друг под формата на свързан списък - друга имплементация на списък, която не е векторна, а разчита на указатели. Всяко блокче пази указател към предходното.

От към бързодействие е силно вероятно операциите по манипулация на низа да са много по-бързи, ако използваш StringBuilder. Тъй като е балансирано оптимизирана структура, има ситуации, които ако надделяват е възможно да не е достатъчно бърз. В такива случаи някои хора биха предпочели имплементация на StringBuilder чрез структурата въже.

 

 

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.