2013-06-07 58 views
27

Tôi muốn xóa đối tượng cuối cùng khỏi một nhanh ArrayList.Xóa đối tượng cuối cùng của ArrayList trong Java

Tôi biết rằng remove(Object O) mất O(n) trong một ArrayList, nhưng tôi tự hỏi, nếu chúng ta có thể làm điều này trong thời gian liên tục kể từ khi tôi chỉ muốn để loại bỏ các đối tượng cuối cùng?

+0

Ngoài ra còn có 'remove (int)' ... –

+18

'list.remove (list.size() - 1) '!!! – NINCOMPOOP

+2

Một ngăn xếp có thể là giải pháp tốt hơn ở đây không? –

Trả lời

52

Xem the documentation for ArrayList#remove(int), như trong cú pháp sau:

list.remove(list.size() - 1) 

Sau đây là cách nó được thực hiện. elementData thực hiện tra cứu trên mảng sao lưu (vì vậy nó có thể cắt nó ra khỏi mảng), phải là thời gian không đổi (vì JVM biết kích thước của tham chiếu đối tượng và số mục nhập có thể tính toán bù trừ) và numMoved0 cho trường hợp này:

public E remove(int index) { 
    rangeCheck(index); // throws an exception if out of bounds 

    modCount++;  // each time a structural change happens 
         // used for ConcurrentModificationExceptions 

    E oldValue = elementData(index); 

    int numMoved = size - index - 1; 
    if (numMoved > 0) 
     System.arraycopy(elementData, index+1, elementData, index, 
         numMoved); 
    elementData[--size] = null; // Let gc do its work 

    return oldValue; 
} 
Các vấn đề liên quan