CodeGym /جاوا بلاگ /Random-UR /جاوا کی فہرست
John Squirrels
سطح
San Francisco

جاوا کی فہرست

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

جاوا لسٹ انٹرفیس

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

جاوا لسٹ کے طریقے

مندرجہ بالا آپریشن جاوا لسٹ انٹرفیس کے طریقوں میں سامنے آئے ہیں۔ ان میں سے کچھ یہ ہیں:
طریقہ تفصیل
شامل کریں (E عنصر) یہ طریقہ اس فہرست کے آخر میں عنصر کا اضافہ کرتا ہے۔
شامل کریں (انڈیکس، عنصر) طریقہ فہرست میں ایک خاص انڈیکس میں ایک عنصر کا اضافہ کرتا ہے۔ اگر مطلوبہ پیرامیٹر پاس ہوجاتا ہے، تو یہ فہرست کے آخر میں عنصر کو شامل کرتا ہے۔
addAll (انٹ انڈیکس، مجموعہ مجموعہ) دیے گئے مجموعہ کے تمام عناصر کو فہرست میں شامل کرتا ہے۔ اگر ایک پیرامیٹر کو پاس کیا جاتا ہے، تو یہ فہرست کے آخر میں دیئے گئے مجموعہ کے تمام عناصر کو شامل کرتا ہے۔
سائز() فہرست کا سائز (فہرست میں عناصر کی مقدار) لوٹاتا ہے۔
حاصل کریں (انڈیکس) عنصر کو مخصوص انڈیکس پر لوٹاتا ہے۔
سیٹ (انڈیکس، عنصر) کسی دیے گئے انڈیکس میں عناصر کو نئے عنصر سے بدلتا ہے اور وہ عنصر لوٹاتا ہے جس کی جگہ ایک نئے عنصر نے لی تھی۔
ہٹائیں (انڈیکس) مخصوص انڈیکس سے ایک عنصر کو ہٹاتا ہے۔
ہٹا دیں (عنصر) فہرست میں دیے گئے عنصر کی پہلی موجودگی کو ہٹاتا ہے۔
واضح() فہرست سے تمام عناصر کو ہٹاتا ہے۔
indexOf(عنصر) دیئے گئے عنصر کی پہلی موجودگی لوٹاتا ہے۔ اگر عنصر فہرست میں موجود نہیں ہے، تو -1 لوٹاتا ہے ۔
lastIndexOf(عنصر) دیئے گئے عنصر کا آخری واقعہ لوٹاتا ہے۔ اگر عنصر فہرست میں موجود نہیں ہے، تو -1 لوٹاتا ہے ۔
برابر (عنصر) فہرست کے عناصر کے ساتھ دیئے گئے عنصر کی مساوات کا موازنہ کریں۔
ہیش کوڈ() دی گئی فہرست کی ہیش کوڈ ویلیو واپس کریں۔
خالی ہے() چیک کرتا ہے کہ آیا فہرست خالی ہے۔ اگر فہرست خالی ہے تو صحیح لوٹاتا ہے۔
پر مشتمل ہے (عنصر) چیک کرتا ہے کہ آیا فہرست میں عنصر موجود ہے ۔ اگر فہرست میں عنصر شامل ہو تو درست لوٹاتا ہے۔
تمام پر مشتمل ہے (مجموعہ مجموعہ) چیک کرتا ہے کہ آیا فہرست میں تمام عناصر کا مجموعہ شامل ہے۔
ترتیب دیں (موازنہ کمپیریٹر) دیئے گئے موازنہ کی بنیاد پر فہرست کے عناصر کو ترتیب دیتا ہے۔
ذیلی فہرست (انڈیکس سے int، انڈیکس سے int) انڈیکس، انکلوزیو، اور ٹو انڈیکس، خصوصی کے درمیان اس فہرست کے حصے کا منظر لوٹاتا ہے۔

فہرست پر عمل درآمد

چونکہ فہرست ایک انٹرفیس ہے، پروگراموں کو اس کا ایک ٹھوس نفاذ بنانے کی ضرورت ہے۔ آپ جاوا کلیکشن API میں درج ذیل فہرست کے نفاذ کے درمیان انتخاب کر سکتے ہیں۔
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
لسٹ انٹرفیس کا سب سے مقبول نفاذ جسے ArrayList کہتے ہیں۔ بہت کم کثرت سے، لیکن آپ اب بھی حقیقی کاموں میں LinkedList کا استعمال دیکھ سکتے ہیں، لیکن Vector اور Stack ایک طویل عرصے سے اخلاقی طور پر متروک ہو چکے ہیں، لہذا آپ کو غالباً یہ صرف قدیم میراثی کوڈ والے منصوبوں میں ہی ملیں گے۔

فہرست انٹرفیس اعلامیہ

آپ درج ذیل طریقوں میں سے کسی ایک طریقے سے جاوا پروگرام میں فہرست کا اعلان کر سکتے ہیں۔
List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
انٹرفیس کے ذریعے نئی فہرست کا اعلان کرنا بہتر ہے۔ اسی طرح، آپ فہرست کے دیگر نفاذ کا اعلان کر سکتے ہیں۔ مختصر ترین طریقہ:
Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
اس طرح کے اعلان کے ساتھ، اس طرح کی فہرستوں کے عناصر کے ڈیٹا کی قسم کا تعین فہرست کے آغاز کے دوران کیا جاتا ہے، یعنی جب عناصر وہاں شامل کیے جاتے ہیں۔
List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
اب ہمارے اسٹیک میں صرف سٹرنگز شامل کیے جاسکتے ہیں، انٹیجرز کو linkedList ، floats to myVector ، اور myList حروف کی فہرست ہے۔

ArrayList کیسے کام کرتی ہے۔

اگر آپ پہلے سے ہی باقاعدہ صفوں سے واقف ہیں، تو آپ ArrayList سے بھی کچھ حد تک واقف ہیں۔ درحقیقت، ArrayList ایک متحرک صف ہے، اور اس کے اندر ایک عام صف ہے۔ یہ صف ایک ڈیٹا اسٹور کے طور پر کام کرتی ہے۔ ArrayList صرف حوالہ جات کی اقسام، کسی بھی چیز کو، بشمول تھرڈ پارٹی کلاسز، سٹرنگز، آؤٹ پٹ اسٹریمز، اور دیگر مجموعوں کو اسٹور کرتا ہے۔ ریپر کلاسز کو ArrayList میں پرائمیو ڈیٹا کی اقسام کو ذخیرہ کرنے کے لیے استعمال کیا جاتا ہے۔ فہرست بناتے وقت، ہم فوری طور پر اس کا سائز مقرر کر سکتے ہیں، لیکن زیادہ تر صورتوں میں ہم ایسا نہیں کرتے۔ پہلے سے طے شدہ طور پر، ArrayList سائز = 10۔ ArrayList میں نیا عنصر شامل کرنا کیسا لگتا ہے؟ سب سے پہلے، یہ دیکھنے کے لیے ایک چیک شروع کیا جاتا ہے کہ آیا اندرونی صف میں کافی جگہ ہے اور کیا ایک اور عنصر فٹ ہو جائے گا۔ اگر جگہ ہے تو، فہرست کے آخر میں نیا عنصر شامل کیا جاتا ہے، یعنی اس سیل میں جو آخری عنصر کی پیروی کرتا ہے۔ اس کا انڈیکس arraylist.size() ہوگا۔ اگر ہم نے ابھی اپنی فہرست بنائی ہے اور یہ خالی ہے، تو اس کا مطلب ہے کہ arrayList.size() = 0۔ اس کے مطابق، انڈیکس 0 والے سیل میں ایک نیا عنصر شامل کیا جائے گا۔ اگر یہ پتہ چلتا ہے کہ کافی جگہ نہیں ہے، ایک نیا عنصر۔ ارے کو ArrayList کے اندر سائز (OldArray * 1.5 کا سائز) + 1 کے ساتھ بنایا گیا ہے۔ اسی اصول کے مطابق، فہرست کے وسط میں ایک اندراج ہوتا ہے، لیکن ایک ہی وقت میں، وہ تمام عناصر جو داخل کردہ عنصر کی پیروی کرتے ہیں۔ دائیں طرف منتقل کر دیا گیا. لہذا، اگر ہمارے پاس صف میں 5 عناصر ہیں، اور ہمیں سیل نمبر 2 (یعنی تیسرا ایک) میں ایک عنصر داخل کرنے کی ضرورت ہے، تو 0 اور 1 صف کے عناصر اپنی جگہ پر رہتے ہیں، سیل 2 میں ایک نیا عنصر ظاہر ہوتا ہے، اور اس کا پیشرو تیسرے خلیے میں جاتا ہے اور اسی طرح۔

جاوا لسٹ کی مثال (Arraylist احساس)

import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
اس پروگرام کا آؤٹ پٹ یہ ہے:
init سے پہلے myList کا سائز = 0 [Alex, Tanya, Veloxy, Alex, Andrew] init کے بعد myList کا سائز = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] میری فہرست کا سائز = 6 0 اینڈریو کے بعد الیکس میں سے ایک کو ہٹانے سے صرف ایک ایلیکس ہے: [ایلیکس، تانیا، ویلکسی، اینڈریو، ایہور] تانیا واضح طریقہ کے بعد ویکٹر کا سائز = 0 ایگزٹ کوڈ 0 کے ساتھ عمل ختم

لنکڈ لسٹ کیسے کام کرتی ہے۔

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

کوڈ کی مثال

import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3

           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
آؤٹ پٹ یہاں ہے:
تین اضافی عناصر: [1، 2، 4] [1، 4، 5] [1، 4، 7، 5]

ویکٹر کوڈ کی مثال

ویکٹر بھی ایک متحرک صف کا احساس ہے اور ArrayList سے بہت ملتا جلتا ہے، لیکن مطابقت پذیر ہے اور اس میں کچھ پرانے طریقے ہیں جو جمع کرنے کے فریم ورک میں شامل نہیں ہیں۔ یہاں اس کلاس کے استعمال کی ایک سادہ سی مثال ہے۔
import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
آؤٹ پٹ ہے:
خالی ویکٹر کا سائز = 0 [ایلیکس، تانیا، اینڈریو] [ایلیکس، تانیا، اینڈریو، ایلکس، ایہور] ویکٹر کا سائز = 5 ویکٹر کا پہلا عنصر = ایلیکس 2 3 [ایلیکس، تانیا، اینڈریو، Alex, Ihor] واضح طریقہ کے بعد ویکٹر کا سائز = 0 ایگزٹ کوڈ 0 کے ساتھ عمل مکمل ہوا۔

جاوا اسٹیک کلاس کوڈ کی مثال

import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
Stack میں نہ صرف add() اور remove() طریقے ہیں بلکہ push اور pop بھی ہیں، وہ اس طرح کے ڈیٹا ڈھانچے کے لیے کلاسیکی ہیں۔ اسٹیک "پہلے اندر، آخری باہر" کے اصول کی پابندی کرتا ہے - یہ اس طرح کی ایک مخالف قطار ہے۔ لہذا، پاپ آپریشن اس عنصر کو پاپ کرتا ہے جو آخری بار اسٹیک پر رکھا گیا تھا۔ یہاں ہماری مثال کی پیداوار ہے:
سچا جھوٹا [پال، جانی، الیکس، اینڈریو] [پال، جانی، الیکس]
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION