CodeGym /جاوا بلاگ /Random-UR /جاوا میں مجموعے۔
John Squirrels
سطح
San Francisco

جاوا میں مجموعے۔

گروپ میں شائع ہوا۔

جاوا میں مجموعہ کیا ہے؟

جاوا میں ایک مجموعہ کو ایک کنٹینر کے طور پر پیش کیا جاتا ہے جو تمام عناصر کو ایک یونٹ میں گروپ کرتا ہے۔ مثال کے طور پر ، ایک میل فولڈر (ای میلز کا گروپ)، ایک ٹیلیفون ڈائریکٹری (فون نمبروں پر ناموں کی نقشہ سازی)۔

ایک فریم ورک کیا ہے؟

فریم ورک ایک بنیادی بنیاد یا ترتیب ہے جس پر آپ فراہم کردہ مختلف کلاسز اور انٹرفیس کو استعمال کرکے کام کرنا شروع کرتے ہیں۔ مثال کے طور پر ، Laravel پی ایچ پی کے مشہور فریم ورکس میں سے ایک ہے جو آپ کی درخواست کے لیے بنیادی ڈھانچہ فراہم کرتا ہے۔

جاوا میں کلیکشن فریم ورک کیا ہے؟

تمام اشیاء کو ایک فن تعمیر کے ساتھ ایک واحد شے میں گروپ کیا گیا ہے جو مجموعوں میں ہیرا پھیری کے لیے مختلف طریقوں کی نمائندگی اور فراہم کرتا ہے۔ لہذا جاوا میں کلیکشنز کا فریم ورک ڈیٹا اور طریقوں کو ذخیرہ کرنے کے لیے پہلے سے لاگو کردہ مختلف ڈیٹا ڈھانچے فراہم کرتا ہے، تاکہ ان کو ترتیب دینے، تلاش کرنے، حذف کرنے، اور اندراج جیسی خصوصیات کے ساتھ جوڑ توڑ کر سکے ۔ مثال کے طور پر ، آپ کچھ بے ترتیب کمپنی کے لیے اپنے صارفین کے لیے سروس کو بہتر بنانے کے لیے ایک نظام نافذ کرنا چاہتے ہیں، پہلے آئیے پہلے پائیں کی بنیاد پر۔ اسے FIFO (پہلے میں پہلے باہر) نفاذ کے طور پر بھی جانا جاتا ہے۔ اب ہمیں اس ڈیٹا ڈھانچے کو لاگو کرنے کی ضرورت ہے اور پھر اسے اپنے مقصد کے حصول کے لیے استعمال کرنا ہے۔ کلیکشن فریم ورک ہمیں ایک قطار انٹرفیس فراہم کرتا ہے جسے لاگو کرنے کے بجائے ہمیں صرف درآمد کرنے کی ضرورت ہے، پھر اسے استعمال کریں، اور ہم ہو گئے۔ عمل درآمد : آپ درج ذیل لائن کا استعمال کر کے تمام مجموعے درآمد کر سکتے ہیں:

import java.util.*;
اگر آپ ایک مخصوص مجموعہ درآمد کرنا چاہتے ہیں تو صحیح پیکیج کا نام استعمال کریں، جیسے:

import java.util.LinkedList;

جاوا میں کلیکشن فریم ورک کے فوائد

اس کے درج ذیل فوائد ہیں۔
  1. پہلے سے نافذ (وقت کی بچت)۔
  2. کارکردگی کی کارکردگی (رفتار اور معیار)۔
  3. نئے APIs کو سیکھنے اور استعمال کرنے کی کوشش کو کم کرتا ہے۔

مجموعہ فریم ورک کا درجہ بندی کیا ہے؟

آئیے اب مجموعوں کا درجہ بندی دیکھتے ہیں لیکن پہلے ہمیں اس فریم ورک کے ضروری اجزاء کو جاننے کی ضرورت ہے۔
  1. انٹرفیس
  2. کلاسز (عمل درآمد)
  3. الگورتھم

جمع کرنے کے فریم ورک کا درجہ بندی

جاوا میں مجموعے - 1تمهارے سمجھنے کے لئے:
  1. مجموعہ، سیٹ، قطار، اور فہرست سبھی انٹرفیس ہیں۔ مجموعہ انٹرفیس کے ذریعے سیٹ، قطار اور فہرست کو بڑھایا جاتا ہے۔
  2. PriorityQueue، HashSet، LinkedList، اور Stack سبھی کلاسز ہیں یا ان انٹرفیس کا نفاذ۔
  3. یہ لازمی نہیں ہے کہ کلاس صرف ایک انٹرفیس کو نافذ کرے ۔ LinkedList مثال کے طور پر Deque انٹرفیس کو بھی نافذ کرتی ہے۔

مجموعوں کی اقسام

جاوا جمع کرنے کے فریم ورک میں ہماری کوششوں کو کم کرنے کے لیے اس میں بہت سے قسم کے مجموعے ہیں۔ یہاں کچھ مجموعوں کی فہرست ہے:
  1. اری لسٹ کلاس
  2. لنکڈ لسٹ کلاس
  3. فہرست انٹرفیس
  4. انٹرفیس سیٹ کریں۔
  5. قطار انٹرفیس
  6. نقشہ انٹرفیس
  7. ترجیحی قطار کی کلاس
  8. ہیش میپ کلاس
  9. موازنہ انٹرفیس
  10. لنکڈ ہیش میپ کلاس
  11. ٹری میپ کلاس
  12. ہیش ٹیبل

مجموعہ انٹرفیس

یہاں ہم جمع کرنے کے کچھ عام انٹرفیس اور پھر کلاسز کے ذریعہ نافذ کردہ کچھ طریقوں پر تبادلہ خیال کریں گے۔

مجموعہ انٹرفیس

یہ کلیکشن فریم ورک کے لیے ایک بنیادی بنیاد ہے کیونکہ یہ عمل درآمد کے لیے تمام ضروری طریقے فراہم کرتا ہے۔ نقشہ واحد ڈیٹا ڈھانچہ ہے جو اسے نافذ نہیں کرتا ہے لیکن باقی تمام اس کے طریقوں کو نافذ کرتے ہیں۔ اس انٹرفیس میں مجموعے کے سائز کو جاننے کے طریقے ہیں، اور آیا مجموعے میں کوئی چیز موجود ہے، مجموعے سے اشیاء کو شامل کرنا یا ہٹانا۔

قابل تکرار انٹرفیس

یہ کلیکشن فریم ورک کا روٹ انٹرفیس ہے کیونکہ اسے کلیکشن انٹرفیس کے ذریعے بڑھایا جاتا ہے جسے تمام کلاسز کے ذریعے لاگو کیا جاتا ہے۔ یہ مخصوص مجموعہ کے لیے اس پر تکرار کرنے کے لیے ایک تکرار کرنے والا لوٹاتا ہے۔

قطار انٹرفیس

قطار کا استعمال عناصر کو رکھنے کے لیے کیا جاتا ہے لیکن ان پر کارروائی نہیں کی جا سکتی۔ بنیادی جمع کرنے کی کارروائیوں کو نافذ کرتے ہوئے، یہ اضافی اندراج اور نکالنے کے طریقے بھی فراہم کرتا ہے۔

انٹرفیس سیٹ کریں۔

سیٹ کو اس میں منفرد عناصر رکھنے کے لیے استعمال کیا جاتا ہے۔ اس میں کبھی بھی ڈپلیکیٹ عناصر اور ریاضی کے سیٹ تجرید کے ماڈلز شامل نہیں ہوتے ہیں تاکہ سیٹوں کی نمائندگی کریں جیسے مشین پر چلنے والے عمل۔

فہرست انٹرفیس

فہرست ایک ترتیب شدہ مجموعہ ہے جسے بعض اوقات ایک ترتیب کہا جاتا ہے جو اس میں ڈپلیکیٹ عناصر رکھ سکتا ہے۔ یہ صارف کو کسی مخصوص عنصر کو اپ ڈیٹ کرنے یا ہٹانے کے لیے کنٹرول فراہم کرتا ہے، ایک عنصر کو اس کی عددی اشاریہ کی قیمت کا استعمال کرتے ہوئے ایک مخصوص نقطہ پر داخل کرتا ہے۔ LinkedList اور ArrayList فہرست انٹرفیس کے نفاذ کی کلاسیں ہیں۔

ڈیک انٹرفیس

ڈیک کا مطلب ہے ڈبل اینڈڈ قطار جس کا مطلب ہے کہ ہم دونوں سروں پر آپریشن کر سکتے ہیں۔ ہم دونوں سروں سے عناصر داخل اور ہٹا سکتے ہیں۔ ڈیک انٹرفیس قطار انٹرفیس کو بڑھاتا ہے۔ ArrayDeque اور LinkedList دونوں Deque انٹرفیس کو نافذ کرتے ہیں۔ یہ دونوں سروں سے مثال کے اندراج، حذف کرنے اور جانچنے کے طریقے فراہم کرتا ہے۔

نقشہ انٹرفیس

میپ انٹرفیس بھی کلیکشن فریم ورک کا حصہ ہے لیکن یہ کلیکشن انٹرفیس کو توسیع نہیں دیتا ہے۔ یہ کلیدی قدر کے جوڑوں کو ذخیرہ کرنے کے لیے استعمال ہوتا ہے۔ اس کے بنیادی نفاذ ہیش میپ، ٹری میپ، اور لنکس ہیش میپ ہیں جو ہیش سیٹ، ٹری سیٹ، اور لنکڈ ہیش سیٹ کے کچھ پہلوؤں میں ملتے جلتے ہیں۔ اس میں ہمیشہ منفرد کلیدیں ہوتی ہیں لیکن اقدار کو نقل کیا جا سکتا ہے۔ جب آپ کو کلید کی بنیاد پر کسی آئٹم کو شامل کرنے، حذف کرنے یا تلاش کرنے کی ضرورت ہو تو یہ مفید ہے۔ یہ ہمیں بنیادی طریقے فراہم کرتا ہے جیسے put , get , remove , size , empty وغیرہ۔

ان انٹرفیس کے عام طریقے

اب ہم نقشہ انٹرفیس کے علاوہ اس فریم ورک میں مختلف کلاسوں کے نفاذ کے لیے فراہم کردہ کچھ عام طریقوں کو دیکھیں گے۔
طریقے تفصیل
عوامی بولین ایڈ (ای ای) مجموعہ میں ایک عنصر داخل کرنے کے لیے استعمال کیا جاتا ہے۔
عوامی بولین ہٹانا (آبجیکٹ عنصر) مجموعہ سے کسی عنصر کو ہٹانے کے لیے استعمال کیا جاتا ہے۔
عوامی انٹ سائز () مجموعہ میں عناصر کی تعداد لوٹاتا ہے۔
عوامی بولین پر مشتمل ہے (آبجیکٹ عنصر) کسی عنصر کی تلاش کے لیے استعمال کیا جاتا ہے۔
عوامی بولین isEmpty() چیک کرتا ہے کہ آیا مجموعہ خالی ہے۔
عوامی بولین برابر (آبجیکٹ عنصر) برابری کی جانچ کرتا ہے۔

کلیکشن کلاسز

جیسا کہ ہم جانتے ہیں کہ فریم ورک کے مختلف انٹرفیس ہوتے ہیں جو اس کے اندر بہت سی کلاسز کے ذریعے لاگو ہوتے ہیں۔ اب آئیے کچھ عام استعمال شدہ کلاسوں پر ایک نظر ڈالتے ہیں۔

لنکڈ لسٹ

یہ سب سے زیادہ استعمال ہونے والا ڈیٹا ڈھانچہ ہے جو اپنے اندر موجود عناصر کو ذخیرہ کرنے کے لیے دوگنا لنک شدہ فہرست کو لاگو کرتا ہے۔ یہ ڈپلیکیٹ عناصر کو ذخیرہ کرسکتا ہے۔ یہ قطار انٹرفیس اور فہرست انٹرفیس کے ذریعہ توسیع شدہ ڈیکیو انٹرفیس کو لاگو کرتا ہے۔ یہ مطابقت پذیر نہیں ہے۔ اب آئیے دیکھتے ہیں کہ لنکڈ لسٹ کا استعمال کرتے ہوئے اوپر زیر بحث (FIFO تصور) اپنے مسئلے کو کیسے حل کیا جائے۔ مسئلہ یہ ہے کہ صارفین کو اس انداز میں خدمت کی جائے کہ وہ پہنچیں یعنی پہلے میں پہلے باہر ۔

مثال


import java.util.*;
 
public class LinkedListExample {
    public static void main(String[] args) {
        Queue<String> customerQueue = new LinkedList<String>();
        //Adding customers to the Queue as they arrived
        customerQueue.add("John");
        customerQueue.add("Angelina");
        customerQueue.add("Brooke");
        customerQueue.add("Maxwell");
 
        System.out.println("Customers in Queue:"+customerQueue);
        //element() => returns head of the queue
        //we will see our first customer and serve him
        System.out.println("Head of the queue i.e first customer: "+customerQueue.element());
        //remove () method =>removes first element(customer) from the queue i.e the customer is served so remove him to see next
        System.out.println("Element removed from the queue: "+customerQueue.remove());
        //poll () => removes and returns the head
        System.out.println("Poll():Returned Head of the queue: "+customerQueue.poll());
        //print the remaining customers in the Queue
        System.out.println("Final Queue:"+customerQueue);
    }
}

آؤٹ پٹ

قطار میں موجود صارفین:[جان، انجلینا، بروک، میکسویل] قطار کے سربراہ یعنی پہلا گاہک: جان عنصر کو قطار سے ہٹا دیا گیا: جان پول(): قطار کا سربراہ واپس آیا: انجلینا فائنل قطار:[بروک، میکسویل]

ArrayList

یہ صرف فہرست انٹرفیس کو لاگو کرتا ہے۔ یہ اندراج کی ترتیب کو برقرار رکھتا ہے اور مختلف ڈیٹا کی اقسام کے عناصر کو ذخیرہ کرنے کے لیے ایک متحرک صف کا استعمال کرتا ہے۔ عناصر کو نقل کیا جا سکتا ہے. یہ غیر مطابقت پذیر بھی ہے اور null اقدار کو محفوظ کر سکتا ہے۔ اب آئیے اس کے مختلف طریقے دیکھتے ہیں... یہ اس وقت کارآمد ہیں جب ہم نہیں جانتے کہ ہمیں کتنے ریکارڈ یا عناصر داخل کرنے کی ضرورت ہے۔ آئیے ایک لائبریری کی مثال لیتے ہیں جہاں ہم نہیں جانتے کہ ہمیں کتنی کتابیں رکھنا ہیں۔ لہذا جب بھی ہمارے پاس کوئی کتاب ہے، ہمیں اسے ArrayList میں داخل کرنے کی ضرورت ہے۔

مثال


public class ArrayListExample {
	public static void main(String args[]) {
		
		// Creating the ArrayList
		ArrayList<String> books = new ArrayList<String>();
		
		// Adding a book to the list
		books.add("Absalom, Absalom!");
		// Adding a book in array list
		books.add("A Time to Kill");
		// Adding a book to the list
		books.add("The House of Mirth");
		// Adding a book to the list
		books.add("East of Eden");
		// Traversing the list through Iterator
		Iterator<String> itr = books.iterator();
		while (itr.hasNext()) {
			System.out.println(itr.next());
		}
	}
}

آؤٹ پٹ

ابی سلوم، ابی سلوم! ہاؤس آف میرتھ ایسٹ آف ایڈن کو مارنے کا وقت

ہیش سیٹ

یہ سیٹ انٹرفیس کو لاگو کرتا ہے اور کبھی بھی ڈپلیکیٹ اقدار پر مشتمل نہیں ہوتا ہے۔ یہ اقدار کو ذخیرہ کرنے کے لیے ہیش ٹیبل کو لاگو کرتا ہے۔ یہ کالعدم اقدار کی بھی اجازت دیتا ہے۔ یہ کبھی بھی داخل کرنے کے آرڈر کو برقرار نہیں رکھتا ہے لیکن add , remove , size کے لیے مستقل وقت کی کارکردگی فراہم کرتا ہے اور طریقوں پر مشتمل ہے ۔ یہ سرچ آپریشنز کے لیے بہترین ہے اور یہ مطابقت پذیر نہیں ہے۔

مثال


import java.util.*;  
class HashSetExample{  
    public static void main(String args[]){  
        //creating HashSet and adding elements to it  
        HashSet<Integer> hashSet=new HashSet();  
        hashSet.add(1);    
        hashSet.add(5);    
        hashSet.add(4);   
        hashSet.add(3);  
        hashSet.add(2);  
        //getting an iterator for the collection
        Iterator<Integer> i=hashSet.iterator(); 
        //iterating over the value 
        while(i.hasNext())  {  
            System.out.println(i.next());  
        }  
    }  
}

آؤٹ پٹ

1 2 3 4 5
جیسا کہ آپ دیکھ سکتے ہیں یہ اندراج آرڈر کو برقرار نہیں رکھتا ہے۔

ArrayDeque

یہ ڈیک انٹرفیس کو لاگو کرتا ہے لہذا یہ دونوں سروں سے آپریشن کی اجازت دیتا ہے۔ یہ کالعدم اقدار کی اجازت نہیں دیتا ہے۔ Stack اور LinkedList کے بطور لاگو ہونے پر یہ Stack اور LinkedList سے تیز ہے۔ ArrayDeque میں سائز کی کوئی پابندی نہیں ہے کیونکہ یہ ضروریات کے مطابق بڑھتا اور سکڑتا ہے۔ یہ غیر مطابقت پذیر ہے، یعنی یہ تھریڈ سے محفوظ نہیں ہے۔ اسے تھریڈ سے محفوظ رکھنے کے لیے ہمیں کچھ بیرونی منطق کو لاگو کرنا ہوگا۔

مثال


import java.util.*;  
public class ArrayDequeExample {  
   public static void main(String[] args) {  
       //creating Deque and adding elements  
       Deque<String> deque = new ArrayDeque<String>();  
       //adding an element
       deque.add("One"); 
       //adding an element at the start
       deque.addFirst("Two");     
       //adding an element at the end
       deque.addLast("Three");    
       //traversing elements of the collection  
       for (String str : deque) {  
            System.out.println(str);  
       }  
   }  
}

آؤٹ پٹ

دو ایک تین

ہیش میپ

یہ نقشہ انٹرفیس کا نفاذ ہے جسے ہیش ٹیبل کی حمایت حاصل ہے۔ یہ کلیدی قدر کے جوڑے ذخیرہ کرتا ہے۔ یہ کالعدم اقدار کی اجازت نہیں دیتا ہے۔ یہ مطابقت پذیر نہیں ہے۔ یہ کبھی بھی داخل کرنے کے آرڈر کی ضمانت نہیں دیتا ہے۔ یہ get اور put جیسے طریقوں کے لیے مستقل وقت کی کارکردگی فراہم کرتا ہے ۔ اس کی کارکردگی دو عوامل پر منحصر ہے - ابتدائی صلاحیت اور بوجھ کا عنصر ۔ صلاحیت ہیش ٹیبل میں بالٹیوں کی تعداد ہے لہذا ابتدائی صلاحیت تخلیق کے وقت مختص کردہ بالٹیوں کی تعداد ہے۔ لوڈ فیکٹر اس بات کا پیمانہ ہے کہ ہیش ٹیبل کی گنجائش بڑھانے سے پہلے اس کو کتنا پاپولیشن کیا جا سکتا ہے۔ ریہیش کا طریقہ صلاحیت کو بڑھانے کے لیے استعمال کیا جاتا ہے اور یہ بنیادی طور پر بالٹیوں کی تعداد کو دوگنا کرتا ہے۔

مثال


import java.util.*;  
public class HashMapExample{  
    public static void main(String args[]){  
        //creating a HashMap
        HashMap<Integer,String> map=new HashMap<Integer,String>();    
        //putting elements into the map
        map.put(1,"England");    
        map.put(2,"USA");    
        map.put(3,"China");
        
        //get element at index 2
        System.out.println("Value at index 2 is: "+map.get(2));
        System.out.println("iterating map"); 
        //iterating the map 
        for(Map.Entry m : map.entrySet()){    
            System.out.println(m.getKey()+" "+m.getValue());    
        }   
    }  
}

آؤٹ پٹ

انڈیکس 2 کی قدر یہ ہے: چین کا اعادہ کرنے والا نقشہ 1 انگلینڈ 2 USA 3 چین

الگورتھم

مجموعوں کا فریم ورک ہمیں مجموعوں پر لاگو کرنے کے لیے مختلف کارروائیوں کے لیے مختلف الگورتھم فراہم کرتا ہے۔ یہاں ہم دیکھیں گے کہ ان الگورتھم کے ذریعے کون سے بڑے آپریشنز کا احاطہ کیا گیا ہے۔ اس سے متعلق الگورتھم شامل ہیں:
  1. چھانٹنا
  2. تلاش کر رہا ہے۔
  3. شفلنگ
  4. روٹین ڈیٹا ہیرا پھیری
  5. ترکیب
  6. انتہائی قدریں تلاش کرنا
بہتر تفہیم کے لیے ہم ترتیب دینے والے الگورتھم پر بات کریں گے۔

چھانٹنا

ترتیب دینے والا الگورتھم ترتیب دینے والے رشتہ کے مطابق فہرست کو دوبارہ ترتیب دیتا ہے۔ تعلقات کی دو شکلیں فراہم کی جاتی ہیں۔
  1. قدرتی ترتیب
  2. تقابلی ترتیب

قدرتی ترتیب

قدرتی ترتیب میں ایک فہرست کو اس کے عناصر کے مطابق ترتیب دیا جاتا ہے۔

تقابلی ترتیب

ایک اضافی پیرامیٹر آرڈر کرنے کی اس شکل میں، جو ایک موازنہ ہے، فہرست کے ساتھ پاس کیا جاتا ہے۔ چھانٹنے کے لیے ایک قدرے بہتر کردہ انضمام کی ترتیب کا الگورتھم استعمال کیا جاتا ہے جو تیز اور مستحکم ہے کیونکہ یہ n log(n) چلانے کے وقت کی ضمانت دیتا ہے اور یہ مساوی عناصر کو دوبارہ ترتیب نہیں دیتا ہے۔ ہم ترتیب کو ظاہر کرنے کے لیے ArrayList سے ایک ہی مثال استعمال کریں گے۔

مثال


import java.util.*;  
public class SortingExample{  
    public static void main(String args[]){  
        //Creating arraylist
        ArrayList<String> books=new ArrayList<String>(); 
        //Adding a book to the arraylist
        books.add("A Time to Kill");
        //Adding a book to the arraylist
        books.add("Absalom, Absalom!");
        //Adding a book to the arraylist
        books.add("The House of Mirth");  
        //Adding a book to the arraylist
        books.add("East of Eden");
        //Traversing list through Iterator before sorting
        Iterator itrBeforeSort=books.iterator();  
        while(itrBeforeSort.hasNext()){  
            System.out.println(itrBeforeSort.next());  
        }
        //sorting the books
        Collections.sort(books);
        System.out.println("After sorting the books");
        //Traversing list through Iterator after sorting  
        Iterator itr=books.iterator();  
        while(itr.hasNext()){  
            System.out.println(itr.next());  
        }  
    }  
}

آؤٹ پٹ

ابی سلوم کو مارنے کا وقت، ابی سلوم! The House of Mirth East of Eden کتابوں کو ترتیب دینے کے بعد A Time to Kill Absalom، Absalom! ایڈن کے مشرق میں دی ہاؤس آف میرتھ

نتیجہ

ہم امید کرتے ہیں کہ اب تک آپ سمجھ گئے ہوں گے کہ جاوا کلیکشن فریم ورک کیا ہے، اس کے انٹرفیس اور کلاسز کیا ہیں اور اس کی مختلف کلاسز کو کیسے نافذ کیا جائے۔ آپ جاوا میں اپنی کوششوں کو کم کرنے کے لیے ہمیشہ اس فریم ورک کا استعمال کر سکتے ہیں۔ مشق کرنے کے لئے آزاد محسوس کریں اور جب بھی آپ کو مزید مدد کی ضرورت ہو یہاں واپس آجائیں۔ خوش تعلیم!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION