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);
}