Я думаю, что встроенная структура cell
подойдет для хранения растущих структур.
Я сделал сравнение среди:
- Динамический размер ячейки, размер ячейки меняется в каждом цикле
- Предварительно выделенная ячейка
- Java LinkedList
Код:
clear;
scale = 1000;
% dynamic size cell
tic;
dynamic_cell = cell(0);
for ii = 1:scale
dynamic_cell{end + 1} = magic(20);
end
toc
% preallocated cell
tic;
fixed_cell = cell(1, scale);
for ii = 1:scale
fixed_cell{ii} = magic(20);
end
toc
% java linked list
tic;
linked_list = java.util.LinkedList;
for ii = 1:scale
linked_list.add(magic(20));
end
toc;
Результаты:
Elapsed time is 0.102684 seconds. % dynamic
Elapsed time is 0.091507 seconds. % pre-allocated
Elapsed time is 0.189757 seconds. % Java LinkedList
Я изменяю scale
и magic(20)
и нахожу, что динамические и предварительно выделенные версии очень близки по скорости. Может быть, ячейка хранит только структуры, похожие на указатели, и эффективна при изменении размера.
Путь Java медленнее. И я нахожу это иногда нестабильным (он разбивает мой MATLAB, когда масштаб очень большой).