ArrayList की जावा 8 डिफ़ॉल्ट क्षमता में 0 है जब तक कि हम ArrayList ऑब्जेक्ट में कम से कम एक ऑब्जेक्ट नहीं जोड़ते (आप इसे आलसी इनिशियलाइज़ेशन कह सकते हैं)।
अब सवाल यह है कि यह बदलाव JAVA 8 में क्यों किया गया है?
उत्तर स्मृति की खपत को बचाना है। लाखों सरणी सूची ऑब्जेक्ट वास्तविक समय जावा अनुप्रयोगों में बनाए जाते हैं। 10 ऑब्जेक्ट्स के डिफ़ॉल्ट आकार का मतलब है कि हम निर्माण के दौरान अंतर्निहित सरणी के लिए 10 पॉइंटर्स (40 या 80 बाइट्स) आवंटित करते हैं और उन्हें खंभे के साथ भरते हैं। एक खाली सरणी (नल से भरा हुआ) बहुत सारी मेमोरी पर कब्जा कर लेता है।
आलसी आरंभीकरण इस मेमोरी की खपत को तब तक के लिए स्थगित कर देता है जब तक आप वास्तव में सरणी सूची का उपयोग नहीं करेंगे।
कृपया मदद के लिए नीचे दिए गए कोड देखें।
ArrayList al = new ArrayList(); //Size: 0, Capacity: 0
ArrayList al = new ArrayList(5); //Size: 0, Capacity: 5
ArrayList al = new ArrayList(new ArrayList(5)); //Size: 0, Capacity: 0
al.add( "shailesh" ); //Size: 1, Capacity: 10
public static void main( String[] args )
throws Exception
{
ArrayList al = new ArrayList();
getCapacity( al );
al.add( "shailesh" );
getCapacity( al );
}
static void getCapacity( ArrayList<?> l )
throws Exception
{
Field dataField = ArrayList.class.getDeclaredField( "elementData" );
dataField.setAccessible( true );
System.out.format( "Size: %2d, Capacity: %2d%n", l.size(), ( (Object[]) dataField.get( l ) ).length );
}
Response: -
Size: 0, Capacity: 0
Size: 1, Capacity: 10
जावा 8 में आर्टिलिस्ट की आर्टिकल डिफॉल्ट क्षमता इसे विवरण में बताती है।