2013-06-07 7 views
27

मैं अंतिम ऑब्जेक्ट को ArrayList से तुरंत निकालना चाहता हूं।जावा में ArrayList की अंतिम वस्तु को हटाने

मुझे पता है कि remove(Object O) एक ArrayList में O(n) लेता है, लेकिन मुझे आश्चर्य है कि अगर यह लगातार समय में यह करने के लिए के बाद से मैं सिर्फ पिछले वस्तु निकालना चाहते हो सकता है?

+0

वहाँ है भी 'हटाने (int)' ... –

+18

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

+2

क्या स्टैक यहां एक बेहतर समाधान होगा? –

उत्तर

52

निम्न सिंटैक्स में के रूप में, the documentation for ArrayList#remove(int) देखें:

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

यह इस प्रकार से लागू किया गया है। elementData बैकिंग सरणी पर एक लुकअप करता है (इसलिए यह इसे सरणी से ढीला कर सकता है), जो स्थिर समय होना चाहिए (चूंकि JVM किसी ऑब्जेक्ट संदर्भ के आकार को जानता है और ऑफसेट की गणना करने वाली प्रविष्टियों की संख्या), और numMoved इस मामले के लिए 0 है:

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; 
} 
संबंधित मुद्दे