इस लेख में, हम समझेंगे कि दो लिस्ट्स को कैसे मर्ज करें। एक लिस्ट एक क्रमबद्ध संग्रह है जो हमें एलिमेंट्स को क्रमिक रूप से स्टोर और एक्सेस करने की अनुमति देती है। इसमें एलिमेंट्स को इंसर्ट, अपडेट, डिलीट और खोजने के लिए इंडेक्स-आधारित मेथड्स होते हैं। इसमें डुप्लिकेट एलिमेंट्स भी हो सकते हैं।
नीचे इसका प्रदर्शन है:
मान लीजिए हमारा इनपुट है:
पहली लिस्ट: [45, 60, 95] दूसरी लिस्ट: [105, 120]
वांछित आउटपुट होगा:
दो लिस्ट्स को मर्ज करने के बाद लिस्ट: [45, 60, 95, 105, 120]
एल्गोरिदम
चरण 1 - शुरू चरण 2 - तीन इंटीजर लिस्ट्स घोषित करें: input_list_1, input_list_2 और result_list चरण 3 - मान परिभाषित करें चरण 4 - input_list_1 के सभी एलिमेंट्स को result लिस्ट में जोड़ने के लिए result_list.addAll(input_list_1) का उपयोग करें चरण 5 - input_list_2 के सभी एलिमेंट्स को result लिस्ट में जोड़ने के लिए result_list.addAll(input_list_2) का उपयोग करें चरण 6 - result_list प्रदर्शित करें चरण 7 - रुकें
उदाहरण 1
यहाँ, हम सभी ऑपरेशन्स को 'main' फंक्शन के तहत बांधते हैं।
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List input_list_1 = new ArrayList<>();
input_list_1.add(45);
input_list_1.add(60);
input_list_1.add(95);
System.out.println("पहली लिस्ट परिभाषित है: " + input_list_1);
List input_list_2 = new ArrayList<>();
input_list_2.add(105);
input_list_2.add(120);
System.out.println("दूसरी लिस्ट परिभाषित है: " + input_list_2);
List result_list = new ArrayList<>();
result_list.addAll(input_list_1);
result_list.addAll(input_list_2);
System.out.println("\nदो लिस्ट्स को मर्ज करने के बाद लिस्ट: " + result_list);
}
}
आउटपुट
पहली लिस्ट परिभाषित है: [45, 60, 95] दूसरी लिस्ट परिभाषित है: [105, 120] दो लिस्ट्स को मर्ज करने के बाद लिस्ट: [45, 60, 95, 105, 120]
उदाहरण 2
यहाँ, हम ऑपरेशन्स को फंक्शन्स में एनकैप्सुलेट करते हैं जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रदर्शित करते हैं।
import java.util.ArrayList;
import java.util.List;
public class Demo {
static void merge(List input_list_1, List input_list_2) {
List result_list = new ArrayList<>();
result_list.addAll(input_list_1);
result_list.addAll(input_list_2);
System.out.println("\nदो लिस्ट्स को मर्ज करने के बाद लिस्ट: " + result_list);
}
public static void main(String[] args) {
List input_list_1 = new ArrayList<>();
input_list_1.add(45);
input_list_1.add(60);
input_list_1.add(95);
System.out.println("पहली लिस्ट परिभाषित है: " + input_list_1);
List input_list_2 = new ArrayList<>();
input_list_2.add(105);
input_list_2.add(120);
System.out.println("दूसरी लिस्ट परिभाषित है: " + input_list_2);
merge(input_list_1, input_list_2);
}
}
आउटपुट
पहली लिस्ट परिभाषित है: [45, 60, 95] दूसरी लिस्ट परिभाषित है: [105, 120] दो लिस्ट्स को मर्ज करने के बाद लिस्ट: [45, 60, 95, 105, 120]
लिस्ट मर्ज करने के अन्य तरीके
| तरीका | कोड | विशेषताएं |
|---|---|---|
| addAll() | list1.addAll(list2) | मूल list1 को संशोधित करता है, O(n) |
| Stream.concat | Stream.concat(list1.stream(), list2.stream()).collect(toList()) | नई लिस्ट बनाता है, फंक्शनल |
| Arrays.asList + addAll | new ArrayList<>(Arrays.asList(arr1, arr2)) | ऐरे के लिए |
| forEach + add | list2.forEach(list1::add) | लैम्ब्डा, list1 को संशोधित करता है |
| Apache Commons | ListUtils.union(list1, list2) | लाइब्रेरी डिपेंडेंसी आवश्यक |
सॉर्टेड मर्ज (मर्ज सॉर्ट का मर्ज चरण)
// दो सॉर्टेड लिस्ट्स को O(n) में मर्ज करें public static ListmergeSorted(List list1, List list2) { List result = new ArrayList<>(); int i = 0, j = 0; while (i < list1.size() && j < list2.size()) { if (list1.get(i) <= list2.get(j)) { result.add(list1.get(i++)); } else { result.add(list2.get(j++)); } } while (i < list1.size()) result.add(list1.get(i++)); while (j < list2.size()) result.add(list2.get(j++)); return result; }
डुप्लिकेट्स के साथ मर्ज (यूनियन)
// यूनियन - डुप्लिकेट्स हटाता है Setunion = new LinkedHashSet<>(list1); union.addAll(list2); List unionList = new ArrayList<>(union); // इंटरसेक्शन - सामान्य एलिमेंट्स Set intersection = new HashSet<>(list1); intersection.retainAll(list2); // डिफरेंस - list1 में जो list2 में नहीं Set difference = new HashSet<>(list1); difference.removeAll(list2);
प्रदर्शन नोट्स
- addAll: सबसे तेज़, आंतरिक रूप से सरणी कॉपी का उपयोग करता है
- क्षमता पूर्व-आवंटन:
new ArrayList<>(list1.size() + list2.size())रीअलोकेशन से बचाता है - लिंक्ड लिस्ट: बार-बार इंसर्शन के लिए बेहतर, लेकिन कैश-फ्रेंडली नहीं