"मैं यहां हूं।"

"हाय, ऐली!"

"आज हम एक दिलचस्प विषय पर बात करेंगे। मैं आपको ArrayList वर्ग के बारे में बताने जा रहा हूँ।"

"एक नई कक्षा? अच्छा! यह क्या कर सकता है?"

"मुझे पीछे की कहानी से शुरू करते हैं। केवल एक चीज जो प्रोग्रामर सरणियों के बारे में नापसंद करते हैं, वह यह है कि आप उनका आकार नहीं बदल सकते हैं। यदि आपको एक सरणी में तीन और तत्वों को जोड़ने की आवश्यकता है, जिसमें केवल एक खाली स्थान है, तो आप क्या करेंगे? "

"इस समस्या का एकमात्र समाधान यह सुनिश्चित करने के लिए बहुत बड़ी सरणियाँ बनाना है कि आपके पास सभी तत्वों के लिए पर्याप्त जगह है। हालाँकि, इसका अर्थ अक्सर व्यर्थ स्मृति होता है। यदि किसी सरणी में आमतौर पर तीन तत्व होते हैं, लेकिन सबसे छोटा मौका भी होता है कि इसे 100 तत्वों को समायोजित करने की आवश्यकता हो सकती है, आपको 100-तत्वों की एक सरणी बनानी होगी।"

"तो, प्रोग्रामर क्या लेकर आए?"

"उन्होंने ऐरेलिस्ट क्लास लिखा , जो ऐरे के समान ही काम करता है, लेकिन यह इसका आकार बदल सकता है।"

"दिलचस्प कदम। उन्होंने ऐसा कैसे किया?"

"प्रत्येक ArrayList ऑब्जेक्ट तत्वों की एक नियमित सरणी संग्रहीत करता है। जब आप ArrayList से तत्वों को पढ़ते हैं , तो यह उन्हें अपने आंतरिक सरणी से पढ़ता है। जब आप उन्हें ArrayList पर लिखते हैं , तो यह उन्हें अपने आंतरिक सरणी में लिखता है। यहां, इन कॉलमों की तुलना करें:"

सरणी सारणी सूची
तत्वों के लिए एक कंटेनर बनाएँ
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
तत्वों की संख्या प्राप्त करें
int n = list.length;
int n = list.size();
एक सरणी/संग्रह से एक तत्व प्राप्त करें
String s = list[3];
String s = list.get(3);
एक तत्व को एक सरणी में लिखें
list[3] = s;
list.set(3, s);

"तो, ArrayList बेहतर क्यों है? जहाँ तक मैं बता सकता हूँ, कोड अब लंबा है।"

"सबसे पहले, ArrayList कई अतिरिक्त ऑपरेशनों का समर्थन करता है जो प्रोग्रामर को हर समय करने पड़ते हैं। एक साधारण सरणी इन ऑपरेशनों का समर्थन नहीं करती है। उदाहरण के लिए, किसी छेद को छोड़े बिना किसी सरणी के बीच से तत्वों को सम्मिलित करना या हटाना। "

"दूसरा, सरणी के आकार को बदलने की क्षमता। जब आपको एक और तत्व जोड़ने की आवश्यकता होती है, लेकिन आंतरिक सरणी में कोई मुफ्त स्लॉट नहीं होता है, तो यहां बताया गया है कि ArrayList के अंदर क्या होता है :

ए) एक और सरणी बनाई गई है जो वर्तमान आंतरिक सरणी से 50% बड़ी है, साथ ही एक तत्व भी है।

बी) पुराने सरणी से सभी तत्वों को नए में कॉपी किया गया है।

सी) नई सरणी को ऐरेलिस्ट ऑब्जेक्ट की आंतरिक सरणी के रूप में सहेजा गया है। पुरानी सरणी को कचरा घोषित कर दिया गया है (हम केवल इसके संदर्भ को संग्रहित करना बंद कर देते हैं)।"

सरणी सारणी सूची
सरणी के अंत में एक तत्व जोड़ें
यह क्रिया समर्थित नहीं है
list.add(s);
सरणी के बीच में एक तत्व जोड़ें
यह क्रिया समर्थित नहीं है
list.add(15, s);
सरणी की शुरुआत में एक तत्व जोड़ें
यह क्रिया समर्थित नहीं है
list.add(0, s);
सरणी से एक तत्व हटाएं
हम एक तत्व को हटा सकते हैं list[3] = null। लेकिन यह सरणी में 'छेद' छोड़ देगा।
list.remove(3);

"हम इस ArrayList के साथ कैसे काम करते हैं?"

"वास्तव में, जैसा कि हम एक साधारण सरणी के साथ करते हैं। देखिए। आइए एक सरणी के साथ काम करने के लिए एक ArrayList के साथ काम करने की तुलना करें। मान लीजिए कि हमें '10 स्ट्रिंग्स में पढ़ने और उन्हें उलटे क्रम में स्क्रीन पर प्रदर्शित करने ' की आवश्यकता है।"

"यह देखो:

एक सरणी के साथ
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
एक ArrayList के साथ
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

मैंने प्रत्येक कॉलम में समान क्रियाओं को हाइलाइट करने के लिए समान रंग का उपयोग किया है।"

"एक ओर, सब कुछ अलग है। दूसरी ओर, यह अभी भी वही है।"

"ठीक है। सिवाय इसके कि हम ArrayList के साथ काम करते समय स्क्वायर ब्रैकेट का उपयोग नहीं करते हैं । इसके बजाय, हम get , set और add विधियों का उपयोग करते हैं।"

"हाँ, मैंने इतना ही इकट्ठा किया। फिर भी, यह बहुत कुछ वैसा ही दिखता है।"