n--;
                if (i<n)
                    si = items.item(n);
                items.remove(n);

Not sure of this, but it seems this moves the last object to the deleted objects position and so isn't it a single move per delete ???