Професионална програма
Loading...
RoYaL avatar RoYaL Trainer 6845 Точки

Здравей,

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

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

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

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

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

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

 

 

 

1