Есть два варианта для добавления эелемента массива в уже существующий массив:
1. ArrayList.Add(object), с последующей конвертацией всего массива в нужный нам тип, —
ourArray = (type_of_our_array[])tmpArrayList.ToArray(typeof(type_of_our_array));
2. Добавление с использованием следующей кострукции:
type_of_our_array[] tmpItem = new type_of_our_array[ourArray.Length + 1];
ourArray.CopyTo(tmpItem, 0);
ourArray = tmpItem;
ourArray[ourArray.Length — 1] = object;
для простых типов int, double, в№1 однозначно быстрее, но для массива классов, которые содержат другие классы или их массивы тесты дали неоднозначный вариант.
Кто нибудь может сказать, что быстрее работает с добавлением сложных(вложенных) классов и почему?
Спасибо заранее!
Re: Динамическое добавление элемента массива, что быстрее?
Здравствуйте, xbit, Вы писали:
X>Если задача изначально требует добавления в массив (удаления из массива) элементов, то корректнее всего для этой цели массивом не пользоваться.
Задача требует только добавлять.
Вы имете ввиду что необходимо в этом случае пользоваться ArrayListом?
Re: Динамическое добавление элемента массива, что быстрее?
Здравствуйте, _Michael, Вы писали:
_M>для простых типов int, double, в№1 однозначно быстрее,
Потому что неоптимально пишете _M>но для массива классов, которые содержат другие классы или их массивы тесты дали неоднозначный вариант. _M>Кто нибудь может сказать, что быстрее работает с добавлением сложных(вложенных) классов и почему?
_M>Спасибо заранее!
ИМХО:
Посмотрите реализацию того же ArrayList'а. Увидите, что он использует внутри простой массив (что естественно). Так вот при добавлении вэлбю-типов происходит пресловутый боксинг, что замедляет работу, сказываясь на производительности. Поэтому второй вариант при правильном программировании (например, увеличение размера массива не на 1, а в два раза) будет быстрее.
Но лучше использовать дженерики и не заморачиваться. Тогда вариант с ArrayList будет по скорости не уступать (или не намного уступать) варианту с массивом (т.к. внутри реализует практически тоже самое).
Что же касается добавления классов, то не заморачивайтесь с массивами, а используйте созданные уже коллекции — люди их не зря писали, производительность у них на уровне.