Junior — Middle
Қадамҳои чӣ гуна барои илова кардани унсури нав ба сохтори ArrayList иҷро мешаванд?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми илова кардани унсури нав ба ArrayList, қадамҳои зерин иҷро мешаванд:
- Санҷида мешавад, ки оё массиви дохилии ҳозира (одатан Object[]) барои нигоҳдории унсури нав кофӣ калон аст.
- Агар ҷой кофӣ набошад, массиви нав бо андозаи зиёдшуда (одатан 50% ё 1.5 маротиба калонтар) сохта мешавад ва ҳамаи унсурҳо ба он нусхабардорӣ мешаванд.
- Унсури нав ба ҷойи аввалини холӣ дар массиви дохилӣ гузошта мешавад.
- Ҳисоби андозаи рӯйхат (size) зиёд карда мешавад.
Инчунин, одатан илова кардани унсур чунин аст:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // санҷиш ва васеъкунии массив
elementData[size++] = e; // илова кардани унсур ва зиёд кардани андоза
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1); // 50% зиёдкунӣ
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
elementData = Arrays.copyOf(elementData, newCapacity);
}