CodeGym /جاوا بلاگ /Random-SD /جاوا ویکٹر
John Squirrels
سطح
San Francisco

جاوا ویکٹر

گروپ ۾ شايع ٿيل
شايد توهان اڳ ۾ ئي جاوا ۾ صفن ۾ اچي چڪا آهيو، ۽ توهان کي خبر آهي ته انهن جي مکيه خرابين مان هڪ آهي سائيز جي استحڪام. هڪ دفعو توهان هڪ مخصوص سائيز جي هڪ صف ٺاهي، توهان بعد ۾ تبديل نه ٿا ڪري سگهو. جاوا ٻولي ۾ ڪيترائي جاوا ڪليڪشن فريم ورڪ ڪلاس آھن جيڪي ھن مسئلي کي حل ڪن ٿا. انهن مان هڪ آهي جاوا ویکٹر ڪلاس. اهو هن مضمون ۾ بحث ڪيو ويندو.

ویکٹر ڪلاس ڇا آهي

جيئن اسان اڳڪٿي ۾ لکيو آهي، جاوا ڪليڪشن فريم ورڪ مان ویکٹر ڪلاس صفن جي جامد سائيز جي مسئلي کي ختم ڪري ٿو. جاوا ویکٹر هڪ قسم جو متحرڪ صف آهي ۽ وڌائي سگھي ٿو يا سائيز ۾ ننڍو ٿي سگھي ٿو. ویکٹر ڪليڪشن ڪلاس کي استعمال ڪندي ، اسان عناصر جي هڪ گروهه کي سادي شين جي طور تي ذخيرو ڪري سگهون ٿا ۽ انهن کي مختلف طريقن سان ترتيب ڏيو. ویکٹر ڪلاس java.util پيڪيج مان دستياب آهي. اهڙيءَ طرح، جاوا ۾ ویکٹر استعمال ڪري سگھجي ٿو جيڪڏهن توهان اڳ ۾ ئي صف جي سائيز کي نه ٿا ڄاڻو، يا جيڪڏهن توهان کي ”سري“ جي ضرورت آهي جيڪا پروگرام جي زندگيءَ دوران طول و عرض تبديل ڪري سگهي ٿي. اهو فوري طور تي چيو وڃي ٿو ته ویکٹر طبقو اڳ ۾ ئي پراڻي آهي، ۽ بعد ۾ مجموعا ظاهر ڪيا ويا آهن جيڪي ان کي وڏي اڪثريت ۾ تبديل ڪري سگهن ٿا. جاوا ویکٹر جو مشهور "اينالاگ" ArrayList ڪلاس آهي. هڪ ٻئي کان انهن طبقن جي وچ ۾ سڀ کان اهم فرق اهو آهي ته ویکٹر هم وقت سازي آهي، جڏهن ته ArrayList نه آهي. انهن ٻن طبقن جي وچ ۾ ٻين فرقن ۽ ویکٹر ڪلاس جي وڌيڪ جديد اينالاگز بابت ٿوري دير بعد ”ویکٹر ڪلاس ۾ ڇا مسئلو آهي“ واري حصي ۾ ڳالهائينداسين .

جاوا ویکٹر طريقا

هتي جاوا ویکٹر طريقا آهن:
  • void add (int index، Object عنصر) ویکٹر جي مخصوص پوزيشن تي مخصوص عنصر داخل ڪري ٿو.

  • boolean add(Object o) ویکٹر جي آخر ۾ مخصوص عنصر شامل ڪري ٿو.

  • boolean addAll(collection c) مخصوص ڪليڪشن ۾ شامل سڀني عناصرن کي ویکٹر جي پڇاڙيءَ ۾ شامل ڪري ٿو، ان ترتيب ۾ ته اھي مخصوص ڪليڪشن ٽريٽر ذريعي واپس ڪيا وڃن.

  • boolean addAll (int index، Collection c) مخصوص ڪليڪشن جي اندر سڀني عناصرن کي ویکٹر ۾ مخصوص پوزيشن تي داخل ڪري ٿو.

  • void addElement(Object obj) هن ویکٹر جي آخر ۾ مخصوص جزو شامل ڪري ٿو، ان جي سائيز کي هڪ طرف وڌائي ٿو.

  • int ظرفيت() هن ویکٹر جي موجوده گنجائش واپسي.

  • void clear() هن ویکٹر مان سڀني عناصر کي هٽائي ٿو.

  • Object clone() هن ویکٹر جو ڪلون واپس ڏئي ٿو.

  • boolean تي مشتمل (Object elem) جاچ ڪري ٿو ته ڇا مخصوص اعتراض هن ویکٹر ۾ هڪ جزو آهي.

  • boolean containsAll(collection c) صحيح موٽائي ٿو جيڪڏهن ویکٹر ۾ ڏنل ڪليڪشن جا سڀ عنصر شامل آهن.

  • void copyInto(Object[] anArray) هن ویکٹر جي اجزاء کي مخصوص صف ۾ نقل ڪري ٿو.

  • اعتراض عنصر ايٽ (انٽ انڊيڪس) مخصوص انڊيڪس تي جزو واپس ڪري ٿو.

  • ڳڻپيوڪر عناصر () هن ویکٹر جي اجزاء جو هڪ ڳڻپ موٽائي ٿو.

  • void sureCapacity(int minCapacity) هن ویکٹر جي ظرفيت کي وڌائي ٿي، جيڪڏهن ضروري هجي ته، انهي کي يقيني بڻائڻ لاءِ ته اهو گهٽ ۾ گهٽ ظرفيت جي دليل سان ڏنل اجزاء جو تعداد رکي سگهي ٿو.

  • boolean equals (Object o) مخصوص اعتراض کي هن ویکٹر سان ڀيٽي ٿو.

  • Object firstElement() ھن ویکٹر جو پھريون حصو (عنصر انڊيڪس 0 تي) موٽائي ٿو.

  • Object get(int index) عنصر کي هن ویکٹر ۾ مخصوص پوزيشن تي موٽائي ٿو.

  • int hashCode() هن ویکٹر لاءِ هيش ڪوڊ ويليو ڏئي ٿو.

  • int indexOf(Object elem) ڏنل دليل جي پهرين واقعن جي ڳولا ڪري ٿو، برابري جي طريقي کي استعمال ڪندي برابري جي جاچ ڪري ٿو.

  • int indexOf (Object elem, int index) ڏنل دليل جي پهرين واقعن جي ڳولا ڪري ٿو، انڊيڪس تي شروع ٿئي ٿو، ۽ برابري جي طريقي سان برابري جي جانچ ڪري ٿو.

  • void insertElementAt (Object obj، int index) مخصوص اعتراض داخل ڪري ٿو جزو جي طور تي ھن ویکٹر ۾ مخصوص انڊيڪس تي.

  • boolean isEmpty() هن ویکٹر کي گم ٿيل اجزاء لاءِ آزمائي ٿو.

  • Object lastElement() ویکٹر جي آخري حصي کي موٽائي ٿو.

  • int lastIndexOf(Object elem) هن ویکٹر ۾ ڏنل اعتراض جي آخري واقعن جي انڊيڪس کي واپس ڪري ٿو.

  • int lastIndexOf(Object elem, int index) مخصوص شئي لاءِ پوئتي ڳولي ٿو، مخصوص انڊيڪس تي شروع ٿئي ٿو، ۽ انڊيڪس کي ان ڏانھن موٽائي ٿو.

  • اعتراض هٽايو (int index) عنصر کي هٽائي ٿو هن ویکٹر ۾ مخصوص پوزيشن تي.

  • boolean remove (Object o) هن ویکٹر ۾ مخصوص عنصر جي پهرين واقعن کي هٽائي ٿو. جيڪڏهن ویکٹر هڪ عنصر تي مشتمل نه آهي، اهو تبديل نٿو ڪري.

  • boolean RemoveAll(Collection c) ویکٹر مان سڀني عنصرن کي هٽائي ٿو جيڪي مخصوص ڪليڪشن ۾ موجود آهن.

  • void removeAllElements() ویکٹر مان سڀني حصن کي ختم ڪري ٿو ۽ ان جي سائيز کي صفر تي سيٽ ڪري ٿو.

  • boolean removeElement(Object obj) هن ویکٹر مان دليل جي پهرين (گهٽ ترين انڊيڪس) واقعن کي هٽائي ٿو.

  • void removeElementAt (int index) انڊيڪس تي هڪ عنصر کي هٽائي ٿو.

  • محفوظ ٿيل وائڊ ريموٽ رينج (int fromIndex، int toIndex) ھن لسٽ مان انھن سڀني عنصرن کي ھٽائي ٿو جن جي انڊيڪس انڊيڪس، انڊيڪس، ۽ انڊيڪس جي وچ ۾ آھي، خاص طور تي.

  • boolean retainAll(Collect c) صرف ویکٹر ۾ موجود عناصر کي برقرار رکي ٿو جيڪي مخصوص ڪليڪشن ۾ موجود آهن.

  • Object set(int index, Object element) هن ویکٹر ۾ مخصوص پوزيشن تي عنصر کي مخصوص عنصر سان تبديل ڪري ٿو.

  • void setElementAt(Object obj، int index) جزو کي مقرر ڪري ٿو ھن ویکٹر جي مخصوص انڊيڪس تي ڏنل اعتراض جي طور تي.

  • void setSize(int newSize) هن ویکٹر جي سائيز کي سيٽ ڪري ٿو.

  • int size() هن ویکٹر ۾ اجزاء جو تعداد واپس ڪري ٿو.

  • List subList(int fromIndex, int toIndex) هن لسٽ جي حصي جي نمائندگي (ڏسو) ڏي ٿو fromIndex، inclusive، ۽ toIndex، خاص طور تي.

  • Object[] toArray() هڪ صف ڏي ٿو جنهن ۾ هن ویکٹر جا سڀئي عنصر صحيح ترتيب ۾ هجن.

  • Object[] toArray(Object[]a) هڪ صف ڏي ٿو جنهن ۾ هن ویکٹر جا سڀئي عنصر صحيح ترتيب ۾ هجن؛ واپسي واري سر جي عمل جو قسم مخصوص صف جو قسم آھي.

  • String toString() هن ویکٹر جي هڪ اسٽرنگ نمائندگي ڏئي ٿو جنهن ۾ هر عنصر جي اسٽرنگ نمائندگي شامل آهي.

  • void trimToSize() هن ویکٹر جي ظرفيت کي ویکٹر جي موجوده سائيز تائين گھٽائي ٿو.

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

import java.util.Vector;

public class VectorExample {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       //adding some vector elements
       vector.add("Johnny");
       vector.add("Ivy");
       vector.add("Ricky");
       System.out.println(vector);

       //adding more vector elements
       vector.add("Johnny");
       vector.add("Paul");
       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("Johnny"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Johnny", 1));
       vector.clear(); //deleting all vector elements
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
هن پروگرام جي پيداوار هيٺ ڏنل آهي:
خالي ویکٹر جي ماپ = 0 [جاني، آئيوي، ريڪي] [جاني، آئيوي، ريڪي، جاني، پال] ويڪٽر جي ماپ = 5 ویکٹر جو پهريون عنصر = جاني 0 3 صاف ٿيڻ کان پوءِ ویکٹر جي ماپ طريقو = 0

ویکٹر ڪلاس سان ڇا غلط آهي؟

جاوا ویکٹر ڪلاس جي دستاويزن جي مطابق ، جيڪڏهن توهان کي پنهنجي پروگرام ۾ ٿريڊ-سيف لاڳو ڪرڻ جي ضرورت ناهي، اها سفارش ڪئي وئي آهي ته استعمال ڪريو ArrayList Vector جي جاءِ تي (مجموعي فريم ورڪ وڌيڪ اثرائتي شرڪت ڪندڙ). اچو ته مٿي ڏنل مثال کي ٿورو تبديل ڪريون، ویکٹر جي بدران ArrayList طبقي کي استعمال ڪندي .
import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

       public static void main(String[] args) {
           List vector = new ArrayList();
           //Vector vector = new Vector();
           System.out.println("the size of the empty vector = " +  vector.size());
           vector.add("Johnny");
           vector.add("Ivy");
           vector.add("Ricky");
           System.out.println(vector);
           vector.add("Johnny");
           vector.add("Paul");
           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("Johnny"));
           //program will print out the first appearance of "Johnny" element starting from the element 1
           //System.out.println(vector.indexOf("Johnny", 1));
           vector.clear();
           System.out.println("the size of the vector after clear method = " +  vector.size());

       }
   }
اسان تبصرو ڪيو ليڪ سان vector.indexOf("Johnny", 1) ، ڇاڪاڻ ته ArrayList ڪلاس ۾ هن تبديلي ۾ اهڙو ڪو طريقو ناهي . ساڳئي سبب لاء، vector.firstElement() لائن تبصرو ڪيو ويو. ٻين سڀني احترام ۾، پروگرام ساڳيو نتيجو پيدا ڪري ٿو جيئن پهرين هڪ. يقينا، اهڙي مثال ۾، اهو واضح ناهي ته ڇو ArrayList Vector کان بهتر آهي . ان بابت وڌيڪ ڄاڻ جي ضرورت آهي، چئو، موضوع. اسان هتي سببن جي فهرست ڏيون ٿا. پهرين، جيتوڻيڪ ویکٹر ڪلاس هم وقت سازي ڪئي وئي آهي، ان کي مڪمل طور تي ٿريڊ-سيف نٿو چئي سگهجي، جيتوڻيڪ اهو عجيب لڳي ٿو. حقيقت اها آهي ته ویکٹر هر عمل کي هم وقت سازي ڪري ٿو، نه ته سڄو ویکٹر مثال پاڻ. اهو پروگرامن ۾ مسئلو ٿي سگهي ٿو جتي توهان کي انفرادي عملن جي بجاءِ عملن جي پوري سيٽ کي هم وقت سازي ڪرڻ جي ضرورت آهي. چئو، جيڪڏهن هڪ ٿريڊ هڪ ویکٹر جي مٿان ٻيهر ٿي رهيو آهي ۽ ٻيو ٿلهو ساختي طور تي ویکٹر جي هڪ مثال کي تبديل ڪري رهيو آهي، ته آئٽرٽر هڪ ConcurrentModificationException اڇلائي ڇڏيندو . اهو ظاهر ٿئي ٿو ته ٻه موضوع هڪ ئي وقت ۾ هڪ ویکٹر مثال سان ڪم ڪري سگهن ٿا جيڪڏهن اهي مختلف عملن کي انجام ڏين. ٻيو، ویکٹر ڪلاس ۾ بهترين ڪارڪردگي نه آهي ڇو ته ان جي شين ۾ هڪ ريزائيبل صف ۽ هم وقت سازي آهي. ھن ميلاپ جو مطلب آھي بلاڪنگ آپريشن لاءِ اضافي اوور ھيڊ، ڇا هم وقت سازي گھربل آھي يا نه. يقينا، اهو ڪارڪردگي کي متاثر ڪري ٿو. ان کان علاوه، هر آپريشن تي ویکٹر کي هم وقت سازي ڪرڻ سان ڪارڪردگي تي به منفي اثر پوي ٿو، ڇو ته اسان هر آپريشن لاءِ بار بار تالا حاصل ڪنداسين. جيڪڏهن ڪلاس جي سموري مثال کي هم وقت سازي ڪئي وئي، ته پوء تالا به هڪ ڀيرو حاصل ڪيو ويندو، جيڪو گهڻو وڌيڪ ڪارائتو آهي. ٽيون، ویکٹر ڪجهه ورثي طريقن جي حمايت ڪري ٿو. مثال طور عناصر() . اهو طريقو ویکٹر جي اجزاء جو هڪ ڳڻپ ڏئي ٿو. پروگرامر اڪثر ڪري استعمال ڪن ٿا Iterator يا ListIterator کي ڳڻڻ لاءِ، ۽ ڪيترن ئي سببن لاءِ. خاص طور تي، انگن اکرن کي ختم نه ڪيو ويو آهي () طريقو بيان ڪيو ويو آهي، جنهن جو مطلب آهي ته فهرست کي ترتيب سان تبديل نه ٿي ڪري سگهجي. انهي سان گڏ، ListIterator جي برعڪس، ڳڻپيوڪر ٻه طرفي رسائي پيش نٿو ڪري. جئين توهان ڏسي سگهو ٿا، ویکٹر ڪافي ڪجھ مسئلا آهن. ڇا جيڪڏھن توھان اڃا تائين لسٽ انٽرفيس جي سلسلي-محفوظ عمل جي ضرورت آھي؟ انهي حالت ۾، ArrayList مدد نه ڪندي، پر توهان استعمال ڪري سگهو ٿا، مثال طور، CopyOnWriteArrayList طبقي بدران ویکٹر ؛ اهو ArrayList جي سلسلي-محفوظ قسم جي طور تي پوزيشن ۾ آهي . توھان پڻ مجموعن کي استعمال ڪندي ArrayList کي هم وقت سازي ڪري سگھو ٿاsynchronizedList() طريقو.

ویکٹر واقعي ۾ ڪجهه مسئلا آهن... اهو اڃا تائين جاوا ۾ ڇو آهي ۽ ان کي ڇو سيکاريو وڃي؟

سوال اهو ٿو پيدا ٿئي ته: اسان آخر ویکٹر ڪلاس ڇو پڙهندا آهيون؟ ۽ اڃا تائين جاوا مان ڇو نه هٽايو ويو آهي؟ حقيقت اها آهي ته جاوا پٺتي پيل مطابقت جو اصول پيش ڪري ٿو. ان جو مطلب اهو آهي ته ڪيترائي سال اڳ لکيل سڀئي پراڻا ڪوڊ جاوا جي جديد نسخن ذريعي سمجهيا ويندا. ان کان علاوه، جاوا ماحول ۾ ڪافي ڪجھه انٽرنيشنل-سطح ايپليڪيشنون آھن جن کي ڏهاڪن تائين سپورٽ ڪيو ويو آھي. اهو بلڪل ممڪن آهي ته توهان کي پنهنجي ڪم ۾ اهڙي ”ڊائناسور“ سان منهن ڏيڻو پوندو، تنهنڪري توهان کي حيرانگي لاءِ تيار رهڻو پوندو، جهڙوڪ ڪوڊ غير موثر ورثي ڪلاسن سان.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION