हाय! मागील काही धड्यांमध्ये, आम्ही आमच्या प्रभुत्वामध्ये खूप प्रगती केली आहे
ArrayList
. तथापि, आतापर्यंत आम्ही फक्त सर्वात सोप्या ऑपरेशन्स केल्या आहेत: काढा, घाला आणि प्रदर्शित करा. अर्थात, यामध्ये काम करताना विकासकांनी पूर्ण करणे आवश्यक असलेल्या कार्यांची सूची समाविष्ट करत नाही ArrayList
. अॅरे आणि क्लास बद्दलचा धडा आठवतो Arrays
? Java च्या निर्मात्यांनी विशेषत: अॅरेसह कार्य करताना प्रोग्रामरना तोंड द्यावे लागणारी सर्वात सामान्य कार्ये हाताळण्यासाठी या वर्गाची रचना केली आहे. आणि कायArrayList
? निश्चितपणे, काही सामान्य कार्यांची यादी आहे जी त्यासह पूर्ण करणे आवश्यक आहे. ते सर्व एका विशिष्ट वर्गात लागू केले गेले आहेत, किंवा प्रत्येक वेळी आम्हाला स्वतःची अंमलबजावणी लिहावी लागेल? नक्कीच, आपल्याला सर्वकाही स्वतः लिहिण्याची आवश्यकता नाही. संग्रह समाविष्ट असलेली सर्वात सामान्य ऑपरेशन्स आधीच विशेष स्थिर वर्गात लागू केली गेली आहेत Collections
. Java मध्ये, डेटा स्ट्रक्चर्सचा समूह सामान्यतः संग्रह म्हणून ओळखला जातो . डेटा वेगवेगळ्या प्रकारे संग्रहित केला जाऊ शकतो. आतापर्यंत, आम्ही फक्त ArrayList
वर्गाचा अभ्यास केला आहे, जिथे डेटा अॅरेमध्ये संग्रहित केला जातो. आम्ही नंतर इतर संग्रहांशी परिचित होऊ. आत्तासाठी, हे समजून घेणे पुरेसे आहे की Collections
वर्ग केवळ कार्य करण्यासाठी डिझाइन केलेले नाहीArrayList
, परंतु इतर प्रकारच्या संग्रहांसह (म्हणून, त्याचे नाव). तर, Collections
वर्ग कोणत्या कार्यांसह कार्य करताना प्रत्यक्षात मदत करतो ArrayList
? प्रथम आणि सर्वात स्पष्ट क्रमवारी आहे. अॅरे बद्दलच्या धड्यात, आम्ही संख्यांसह एक उदाहरण मानले. आता आपण स्ट्रिंग्सच्या उदाहरणाचा विचार करू. वर्ग संग्रहांच्या सामग्रीची क्रमवारी लावण्यासाठी पद्धत Collections
लागू करतो :sort()
public class Main {
public static void main(java.lang.String[] args) {
String mercury = new String("Mercury");
String venus = new String("Venus");
String earth = new String("Earth");
String mars = new String("Mars");
String jupiter = new String("Jupiter");
String saturn = new String("Saturn");
String uranus = new String("Uranus");
String neptune = new String("Neptune");
ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
jupiter, saturn, uranus, neptune));
Collections.sort(solarSystem);
System.out.println(solarSystem);
}
}
आउटपुट: [पृथ्वी, गुरू, मंगळ, बुध, नेपच्यून, शनि, युरेनस, शुक्र] अक्षरे क्रमवारीत लावली आहेत! पण वर्णक्रमानुसार का? स्ट्रिंग्सची तुलना कशी केली जाते हे नियंत्रित करणारे तर्कशास्त्र String
प्रत्यक्षात वर्ग लागू करतो (जे वर्णानुक्रमानुसार होते). तुम्ही स्वतः तयार केलेल्या वर्गांसाठी, तुम्ही तुमचे स्वतःचे तुलना तर्क लागू करू शकता, परंतु आम्ही इतर धड्यांमध्ये याबद्दल बोलू. वर्ग Collections
तुम्हाला मधील किमान आणि कमाल घटक शोधण्यात देखील मदत करतो ArrayList
. हे min()
आणि max()
पद्धती वापरून केले जाते:
public static void main(java.lang.String[] args) {
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
System.out.println(Collections.max(numbers));
System.out.println(Collections.min(numbers));
}
आउटपुट: 7 1 साहजिकच, सर्व घटकांवर पुनरावृत्ती करण्यासाठी आणि सर्वात मोठा/लहान घटक शोधण्यासाठी स्वहस्ते कोड लिहिण्यापेक्षा हे खूप सोयीचे आहे :) दुसरी अतिशय उपयुक्त पद्धत आहे reverse()
. जर आम्हाला सूची "फ्लिप" करायची असेल तर घटक उलट क्रमाने गेले तर आम्ही ते कसे करू? असे अल्गोरिदम स्वतःहून लिहिणे कदाचित इतके सोपे नसेल :) सुदैवाने, reverse()
पद्धत कशी आहे हे आधीच माहित आहे. समजा या पद्धतीने आपल्या ग्रहांची वर्णमालानुसार क्रमवारी लावली आहे हे आम्हाला आवडत नाही sort()
आणि आम्हाला त्यांचा क्रम उलटायचा आहे: Z ते A:
public class Main {
public static void main(java.lang.String[] args) {
String mercury = new String("Mercury");
String venus = new String("Venus");
String earth = new String("Earth");
String mars = new String("Mars");
String jupiter = new String("Jupiter");
String saturn = new String("Saturn");
String uranus = new String("Uranus");
String neptune = new String("Neptune");
ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
jupiter, saturn, uranus, neptune));
Collections.sort(solarSystem);
Collections.reverse(solarSystem);
System.out.println(solarSystem);
}
}
आउटपुट: [शुक्र, युरेनस, शनि, नेपच्यून, बुध, मंगळ, गुरू, पृथ्वी] वर्गीकरण, घटकांचा क्रम इत्यादींबद्दल आपण बरेच काही बोलत आहोत. परंतु आपले उद्दिष्ट उलट असेल तर? उदाहरणार्थ, समजा आम्ही बिंगो गेम लागू करण्याचा प्रयत्न करत आहोत. आम्ही ड्रममध्ये 100 संख्या जोडतो. ते एका वेळी स्क्रीनवर दिसले पाहिजेत. त्याच्या तिकिटावरील सर्व आकडे पार करणारा पहिला खेळाडू जिंकतो. ही shuffle()
पद्धत वापरून अंमलात आणणे सोपे आहे:
public class Main {
public static void main(java.lang.String[] args) {
ArrayList<Integer> bingoDrum = new ArrayList<>(100);
for (int i = 1; i <= 100; i++) {
bingoDrum.add(i);// add the numbers 1 to 100 to the drum
}
Collections.shuffle(bingoDrum);// Mix it up
System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
for (int i = 0; i < 10; i++) {
System.out.println(bingoDrum.get(i));
}
}
}
आउटपुट: तुमचे लक्ष, कृपया! ड्रममधील पहिले 10 क्रमांक येथे आहेत! 32 61 4 81 25 8 66 35 42 71 हे इतके सोपे आहे! समस्येचे निराकरण झाले आहे, आणि गेमचा आमचा भाग लिहिला आहे :) आता आपण वेगळ्या परिस्थितीची कल्पना करूया. पूर्वी, आम्ही solarSystem
ग्रहांची यादी तयार केली होती. आणि हे एक सोडून सर्व प्रकारे आमच्यासाठी अनुकूल आहे असे दिसते: तुम्ही त्यातून आयटम हटवू शकता आणि नवीन जोडू शकता ! हे स्पष्टपणे आम्हाला अपेक्षित वर्तन नाही: आमच्या कार्यक्रमात सौर यंत्रणा अपरिवर्तित असावी. वर्गाची Collections
एक अतिशय मनोरंजक पद्धत आहे: unmodifiableList()
. हे युक्तिवाद म्हणून पास केलेल्या सूचीमधून एक अपरिवर्तनीय सूची तयार करते. तुम्ही या सूचीमधून आयटम जोडू किंवा हटवू शकत नाही. सूर्यमालेतील ग्रहांची यादी हाताळताना आपल्याला नेमके हेच हवे आहे!
public class Main {
public static void main(java.lang.String[] args) {
String mercury = new String("Mercury");
String venus = new String("Venus");
String earth = new String("Earth");
String mars = new String("Mars");
String jupiter = new String("Jupiter");
String saturn = new String("Saturn");
String uranus = new String("Uranus");
String neptune = new String("Neptune");
List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
jupiter, saturn, uranus, neptune)));
solarSystem.add("Pluto");// Try to add a new element
}
}
आउटपुट: "मुख्य" थ्रेडमधील अपवाद java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) Main.main(Main.java:21) येथे ही एक त्रुटी आहे: तुम्ही करू शकत नाही काहीही जोडा solarSystem
! तुम्हाला येथे लक्ष देण्याची गरज आहे ती ही आहे की ही पद्धत परत येते List<>
(नाही ArrayList<>
), कारण हा प्रकार सर्व प्रकारच्या सूचींसाठी सामान्य आहे. प्रोग्रामरने चुकीच्या क्रमाने घटक जोडणे ही आणखी एक सामान्य परिस्थिती आहे जी सहजपणे होऊ शकते. जर असे घडले आणि आम्हाला असे आढळले की बुध आणि नेपच्यून मिश्रित आहेत, तर आम्ही ही swap()
पद्धत वापरून ही चूक सुधारू शकतो:
public class Main {
public static void main(java.lang.String[] args) {
String mercury = new String("Mercury");
String venus = new String("Venus");
String earth = new String("Earth");
String mars = new String("Mars");
String jupiter = new String("Jupiter");
String saturn = new String("Saturn");
String uranus = new String("Uranus");
String neptune = new String("Neptune");
ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
, jupiter, saturn, uranus, mercury));// The planets are in the wrong order
System.out.println(solarSystem);
Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
System.out.println(solarSystem);
}
}
आम्ही आमच्या सूचीच्या पध्दतीकडे swap()
आणि दोन घटकांचे निर्देशांक अदलाबदल करण्याची आवश्यकता आहे. लक्षात घ्या की पद्धत निर्देशांकांसह कार्य करते, संदर्भांसह नाही. तर, येथे आपल्याला पद्धत वापरावी लागली ArrayList.indexOf()
. आउटपुट: [नेपच्यून, शुक्र, पृथ्वी, मंगळ, गुरू, शनि, युरेनस, बुध] [बुध, शुक्र, पृथ्वी, मंगळ, गुरू, शनि, युरेनस, नेपच्यून] शेवटी, आपण एका अतिशय मनोरंजक पद्धतीशी परिचित होऊ : disjoint()
. हे दोन संग्रह एकमेकांना छेदतात की नाही हे तपासते, म्हणजे त्यांच्यात किमान एक समान घटक आहे की नाही . जर त्यांनी तसे केले नाही तर ते खरे आहे. ते करतात, मग ते खोटे परत येते
public class Main {
public static void main(java.lang.String[] args) {
String mercury = new String("Mercury");
String venus = new String("Venus");
String earth = new String("Earth");
String mars = new String("Mars");
String jupiter = new String("Jupiter");
String saturn = new String("Saturn");
String uranus = new String("Uranus");
String neptune = new String("Neptune");
ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));
System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));
}
}
जसे तुम्ही बघू शकता, आमच्या दोन सूचीमध्ये पूर्णपणे भिन्न घटक आहेत, त्यामुळे प्रोग्राम सत्य आउटपुट करतो . हा एक मनोरंजक आणि अतिशय उपयुक्त वर्ग आहे. जसे की Arrays
, ते आमच्यासाठी बरेच नित्यक्रम, कंटाळवाणे काम करते, आम्हाला इतर गोष्टींवर लक्ष केंद्रित करू देते.
GO TO FULL VERSION