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

صفوں کی کلاس

گروپ میں شائع ہوا۔
ہیلو دوبارہ! :) آج کے سبق میں، ہم جاوا میں Arrays کلاس کے بارے میں بات کریں گے۔ پچھلے سبق میں، ہمیں اس طرح کے ڈیٹا ڈھانچے کے بارے میں معلوم ہوا جسے ایک صف کہتے ہیں۔ ہم نے سیکھا کہ انہیں کیسے بنانا ہے اور ڈیٹا سے بھرنا ہے۔ اور ہم نے دیکھا کہ وہ میموری میں کیسے محفوظ ہیں۔ آج ہم کچھ کاموں اور صفوں کے ساتھ کام کرنے کی مثالیں دیکھیں گے جو آپ کو اکثر حقیقی کام میں نظر آئیں گے۔ مثال کے طور پر، اس صورت حال کا تصور کریں: ہمارے پاس 10 بے ترتیب نمبروں کی ایک صف ہے۔
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
ہمارا کام اس صف کو صعودی ترتیب میں ترتیب دینا ہے: چھوٹے سے بڑے تک۔ آخر میں، یہ اس طرح نظر آنا چاہئے: [-234، -2، 16، 26، 35، 43، 92، 99، 167] ہم اسے کیسے کریں؟ یہ کام معمولی نہیں ہے۔ ہم نے پہلے کبھی ایسا نہیں کیا:/ کوئی خیال؟ اندازہ لگانے کی کوشش کریں۔ یہاں ایک حل ہے:
  • صف کے تمام عناصر کو دیکھیں۔ ہر عنصر کا موازنہ اگلے ([0] کے ساتھ [1]، [1] کے ساتھ [2]، [2] کے ساتھ [3]، وغیرہ)۔ اگر موجودہ عنصر اگلے سے بڑا ہے، تو ہم انہیں تبدیل کرتے ہیں، اور پھر اگلے عنصر پر چلے جاتے ہیں۔ اگر نہیں، تو انہیں ایسے ہی رہنے دیں جیسے وہ ہیں، اور آگے بڑھیں۔
  • اس طرح، عناصر سے پہلے گزرنے کے بعد، سب سے بڑی قدر (167) آخری سیل میں ہونے کی ضمانت ہے۔
  • اب ہم دوبارہ تمام عناصر کے ذریعے جائیں گے، لیکن اس بار ہم انڈیکس [0] کے ساتھ شروع کریں گے حتمی عنصر تک (سب سے بڑی تعداد پہلے سے ہی اپنی جگہ پر ہے) اور وہی موازنہ اور تبادلہ کریں گے۔ اس پاس کے بعد، آخری سیل میں، ہمارے پاس دوسری سب سے بڑی قدر (99) ہوگی۔
  • اس عمل کو جتنی بار دہرائیں ہمارے پاس صف کے عناصر ہیں۔
ہمیں اندازہ ہو گیا ہے۔ اب ہمیں صرف کوڈ لکھنے کی ضرورت ہے۔ ایسا لگتا ہے: صفوں کی کلاس اور اس کا استعمال - 2
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       for (int i = numbers.length - 1; i > 0; i--) {
           for (int j = 0; j < i; j++) {
           /* Compare the elements in pairs.
             If they are not in the right order,
             then swap them */
               if (numbers[j] > numbers[j + 1]) {
                   int tmp = numbers[j];
                   numbers[j] = numbers[j + 1];
                   numbers[j + 1] = tmp;
               }
           }
       }

   }
}
اہ... یہ قدرے پیچیدہ لگتا ہے -_- اگر عام اصول سمجھ میں آتا ہے، تب بھی ہمیں اتنے آسان کام کو حل کرنے کے لیے کافی کوڈ لکھنا پڑتا ہے۔ ٹھیک ہے، شاید ہم نے خود کو بہت زیادہ سمجھا ہے؟ ہم نے جس کام سے نمٹا ہے وہ شاید اب بھی ہمارے لیے بہت پیچیدہ ہے۔ آئیے کچھ آسان کرنے کی کوشش کریں۔ مثال کے طور پر، ایک ہی نمبر کی صف لیں۔
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
ہمارا کام اس کے مواد کو دوسری صف میں کاپی کرنا ہے۔
int [] numbersCopy = new int[10];
اس کے بارے میں سوچیں کہ آپ اسے کس طرح استعمال کریں گے جو آپ پہلے سے ہی arrays کے بارے میں جانتے ہیں؟ مثال کے طور پر، آپ ایک لوپ میں نمبروں کی صف سے گزر سکتے ہیں اور ترتیب وار اس کے عناصر کو numbersCopy میں لکھ سکتے ہیں :
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = new int[10];

       for (int i = 0; i < numbers.length; i++) {

           numbersCopy[i] = numbers[i];
       }

   }
}
ٹھیک ہے، اہ، یہاں ہم نے بنیادی طور پر یہ کیا ہے! ایسا لگتا ہے کہ ہم نے مسئلہ حل کر لیا ہے۔ تاہم، اگر آپ کو اکثر ایسا کرنے کی ضرورت ہوتی ہے، تو آپ کے کوڈ میں ایک جیسے لوپس کا ایک گروپ ہوگا۔ درحقیقت، یہ (اور دیگر) کام جاوا کے تخلیق کاروں نے طویل عرصے سے حل کیے ہیں۔ ہمیں "وہیل کو دوبارہ ایجاد کرنے" اور اپنے حل کو کوڈ کرنے کی ضرورت نہیں ہے۔ arrays کے ساتھ کام کرتے وقت عام کاموں کو انجام دینے میں آپ کی مدد کرنے کے لیے ایک خاص جامد کلاس ( Arrays ) موجود ہے۔ جاوا پروگرامرز کو درپیش سب سے عام کاموں کو انجام دینے کے طریقے اس کلاس میں شامل کیے گئے ہیں۔ مثال کے طور پر، ایک صف کو ترتیب دینے کا کام، جسے ہم نے ہینڈل کرنے کی کوشش کی، ایک ہی لائن میں حل ہو جاتا ہے:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       Arrays.sort(numbers);

       System.out.println(Arrays.toString(numbers));

   }
}
Arrays.sort () طریقہ صف کو ترتیب دیتا ہے۔ اور اس کا الگورتھم ہمارے لکھے ہوئے کوڈ سے کہیں زیادہ موثر ہے۔ کنسول آؤٹ پٹ: [-234, -2, 16, 26, 35, 43, 80, 92, 99, 167] نوٹ: ارے کو سٹرنگ میں تبدیل کرنے کے لیے, ہم نے Arrays کلاس کا دوسرا طریقہ استعمال کیا: Arrays.toString() . جاوا میں ارے اپنے طور پر toString() طریقہ کو اوور رائڈ نہیں کرتے ہیں ۔ لہذا، اگر آپ صرف لکھتے ہیں
System.out.println(numbers.toString());
آبجیکٹ کلاس کی toString() کو بلایا جائے گا۔ ایک صف کے لیے، آؤٹ پٹ کچھ اس طرح ہوگا: [I@4554617c اب ہم اس بارے میں تفصیل میں نہیں جائیں گے کہ یہ آؤٹ پٹ کیوں ہے۔ اہم بات یہ ہے کہ یہ واضح طور پر وہ نہیں ہے جس کی ہمیں ضرورت ہے۔ لیکن Arrays.toString() وہی کرتا ہے جو ہم چاہتے ہیں۔ ویسے، کاپی کرنا بھی آسانی سے Arrays کلاس کے ساتھ مکمل کیا جاتا ہے:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
ہم Arrays.copyOf() طریقہ کو اپنی اصل صف (جس سے ہم اقدار کاپی کرنا چاہتے ہیں) اور نئی صف کی لمبائی جس میں ہم ڈیٹا کاپی کر رہے ہیں۔ اس معاملے میں، ہم نے لمبائی کے طور پر numbers.length کا اشارہ کیا، کیونکہ پوری صف کو کاپی کرنا چاہتے ہیں۔ اگر ہم صرف پہلے چند عناصر کو کاپی کرنا چاہتے ہیں، تو ہم ایک نئی چھوٹی صف کی لمبائی بتا سکتے ہیں:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, 4);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
یہاں ہم نے نئی صف کی لمبائی کے طور پر 4 کی وضاحت کی ہے۔ اس کے مطابق، نمبروں کے صرف پہلے 4 عناصر کو نئی صف میں کاپی کیا جائے گا۔ کنسول آؤٹ پٹ: [167, -2, 16, 99] ویسے، Arrays آپ کو صف کے آغاز کے بجائے درمیان سے ایک ارے کا حصہ کاپی کرنے دیتا ہے۔
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOfRange(numbers, 2,6);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
آؤٹ پٹ: [16, 99, 26, 92] نمبرز کو دوسری صف سے دوسرے (شامل) سے چھٹے (شامل نہیں) عنصر تک نئی صف میں کاپی کیا گیا۔ ہمیں دو صفوں کا موازنہ کرنے کی بھی ضرورت پڑ سکتی ہے۔ جیسا کہ toString() طریقہ کے ساتھ، arrays خود equals() طریقہ کو اوور رائڈ نہیں کرتی ہیں۔ تو اگر ہم ان کا اس طرح موازنہ کرنے کی کوشش کریں۔
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(numbers.equals(numbers2));
   }
}
پھر ہم جھوٹے ہو جاتے ہیں. اس کی وجہ یہ ہے کہ Object.equals() ، جو حوالہ جات کا موازنہ کرتا ہے، کہا جائے گا۔ اور، ظاہر ہے، وہ مختلف ہیں! لیکن ہمیں جس چیز کی ضرورت ہے وہ ہے سرنی کے مواد کا موازنہ کرنا، حوالہ جات نہیں۔ Arrays کلاس برابر () طریقہ کو اوور رائیڈ کرتا ہے تاکہ اسے بالکل وہی کیا جائے جو ہم چاہتے ہیں :
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(Arrays.equals(numbers, numbers2));
   }
}
آؤٹ پٹ: true ویسے، Arrays کلاس نہ صرف عام arrays کے ساتھ کام کرتی ہے، بلکہ دو جہتی والوں کے ساتھ بھی:
public class Main {

   public static void main(String[] args) {

       int[][] numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

       int[][] numbersCopy = Arrays.copyOf(numbers, numbers.length);

       System.out.println("Are these two-dimensional arrays equal?");
       System.out.println(Arrays.deepEquals(numbers, numbersCopy));

       System.out.println(Arrays.deepToString(numbersCopy));
   }
}
آؤٹ پٹ: کیا یہ دو جہتی صفیں برابر ہیں؟ true [[1, 2, 3], [4, 5, 6], [7, 8, 9]] جیسا کہ آپ دیکھ سکتے ہیں، Arrays.copyOf() طریقہ دو جہتی صف کو کاپی کرنے کے قابل تھا۔ اور کلاس کے پاس دو جہتی صفوں کا موازنہ اور ڈسپلے کرنے کے خاص طریقے ہیں: deepEquals اور deepToString() ۔ مستقبل میں، آپ بار بار دیکھیں گے (اور اس حقیقت پر خوش ہوں گے کہ) کہ جاوا کے تخلیق کاروں نے پروگرامرز کو کثرت سے سامنا کرنے والے بہت سے حالات کا اندازہ لگایا تھا، اور زبان میں ان کے لیے تیار کردہ حل نافذ کیے تھے۔ ان حلوں کا استعمال وہیل کو دوبارہ ایجاد کرنے سے کہیں زیادہ آسان اور آسان ہے، ٹھیک ہے؟ :) اوریکل ویب سائٹ پر Arrays کلاس کے لیے دستاویزات ضرور پڑھیں ۔ آپ کی پڑھائی میں اچھی قسمت!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION