Sobes.tech
Junior — Middle

რა ნაბიჯები ხორციელდება ახალი ელემენტის დამატებისთვის ArrayList-ის სტრუქტურაში?

sobes.tech AI

პასუხი AI-სგან

ArrayList-შე ახალი ელემენტის დამატებისას შემდეგი ნაბიჯები ხორციელდება:

  1. შემოწმდება, არის თუ არა მიმდინარე შიდა მასივი (საშუალოდ Object[]) საკმარისად დიდი ახალი ელემენტის შენახვისთვის.
  2. თუ ადგილი არ არის საკმარისი, ქმნიან ახალ მასივს გაზრდილი ზომით (საშუალოდ 50% ან 1.5 ჯერ მეტი), და ყველა ელემენტი გადადის მასში.
  3. ახალი ელემენტი მოთავსებულია შიდა მასივის პირველ თავისუფალ პოზიციაზე.
  4. ზომის გამოთვლელი (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);
}