يوضح هذا البرنامج التعليمي كل شيء عن بنية بيانات المتجه في Java مع أمثلة. سوف تتعلم إنشاء ، مبدئي ، فرز & أمبير ؛ استخدم ناقل Java في برامجك:
يمكن تعريف المتجه على أنه مصفوفة ديناميكية يمكن أن تنمو أو تتقلص من تلقاء نفسها ، أي أن المتجه سينمو عند إضافة المزيد من العناصر إليه وسيتقلص عند إضافة العناصر يتم إزالتها منه.
هذا السلوك يختلف عن سلوك المصفوفات الثابتة. ولكن على غرار المصفوفات ، يمكن الوصول إلى عناصر المتجه باستخدام فهارس الأعداد الصحيحة.
يمكن اعتبار المتجه مشابهًا لهيكل بيانات مصفوفة ديناميكية أخرى ، اختلافان أدناه:
- يتم مزامنة المتجه ، أي أن جميع الطرق في Vector تم وضع علامة عليها على أنها `` متزامنة '' ، وبالتالي بمجرد استدعاء الطريقة ، لا يمكن استدعاء نفس الطريقة ما لم يتم استدعاء المكالمة السابقة منتهية.
- فئة المتجه لها العديد من الطرق التي ليست جزءًا من إطار عمل المجموعات ولكن طرقها القديمة.
Java Vector Class
فئة Vector هي بصرف النظر عن الحزمة “ java.util ” وتنفذ واجهة القائمة. المتجه عبارة عن مصفوفة من الكائنات أو متجه من الكائنات.
يتم تقديم تعريف فئة لفئة Vector أدناه:
public class Vector extends Object implements List, Cloneable, Serializable
كما هو موضح أعلاه ، تمتد فئة Vector " java.lang.object ”وتنفذ واجهات قائمة وواجهات قابلة للنسخ والتسلسل.
كيفية إنشاء متجه في Java؟
يمكنك ذلكإنشاء كائن Vector باستخدام أي من أساليب مُنشئ Vector التالية.
Constructor Prototype | الوصف |
---|---|
متجه () | هذا هو المُنشئ الافتراضي لفئة Vector. ينشئ متجهًا فارغًا بحجم 10. |
متجه (سعة أولية int) | يبني هذا المُنشئ ذو التحميل الزائد كائنًا متجهًا فارغًا بسعة = السعة الأولية. |
متجه (int initialCapacity ، int CapacityIncrement) | تنشئ طريقة المُنشئ هذه كائنًا متجهًا فارغًا بسعة مبدئية محددة وقدرة زيادة السعة. |
Vector (Collection c) | يتم إنشاء كائن متجه مع العناصر الأولية من المجموعة المحددة c. |
دعونا نلقي نظرة على كل من المنشئات لتهيئة كائنات Vector.
تهيئة Vector
(i) Vector ()
هذا هو المُنشئ الافتراضي لفئة Vector. عند استدعاء هذا المُنشئ ، يتم إنشاء كائن متجه بالحجم الافتراضي 10.
البناء العام لهذه الطريقة هو:
كائن متجه = new Vector ()؛
على سبيل المثال ،
Vector vec1 = new Vector ();
تنشئ العبارة أعلاه متجهًا جديدًا 'vec1' بحجم 10.
(ii) Vector (int initialCapacity)
يقبل المُنشئ الزائد لفئة Vector "initialCapacity" كوسيطة. ينشئ هذا المنشئ متجهًاكائن بسعة محددة.
البنية العامة للطريقة هي:
كائن متجه = ناقل جديد (قدرة أولية) ؛
على سبيل المثال ،
Vector vec1 = new Vector (10);
سينشئ بيان البرمجة أعلاه كائنًا متجهًا 'vec1' بسعة 10 أي يمكن لهذا المتجه تخزين ما يصل إلى 10 العناصر.
(iii) Vector (int initialCapacity، int capacityIncrement)
هذا مُنشئ آخر محمّل بشكل زائد من فئة Vector ويقوم بإنشاء كائن متجه مع الأولي المحدد السعة والزيادة في السعة.
الصيغة العامة لهذه الطريقة هي:
كائن متجه = ناقل جديد (السعة الأولية ، السعة) ؛
على سبيل المثال ،
Vector vec1 = new Vector(5,10);
في البيان أعلاه ، السعة الأولية للمتجه هي 5 والزيادة هي 10. وهذا يعني عندما يتم إدخال العنصر السادس في المتجه ، ستزداد سعة المتجه إلى 15 (5 + 10). وبالمثل ، عند إدخال العنصر السادس عشر ، سيتم توسيع سعة المتجه إلى 25 (15 +10).
(iv) Vector (Collection c)
آخر مُنشئ تم تحميله زائدًا لفئة Vector يأخذ مجموعة محددة مسبقًا كوسيطة ويقوم بإنشاء متجه مع جميع العناصر من هذه المجموعة كعناصرها.
البنية العامة هي:
كائن متجه = متجه جديد (مجموعة ج) ؛
على سبيل المثال ،
Vector vec1 = new Vector(aList); where aList = {1,2,3,4,5};
الالبيان أعلاه سينشئ Vector 'vec1' مع العناصر الأولية كـ {1،2،3،4، 5}.
سيسمح لنا وضع كل هذه الأوصاف في الاعتبار بتنفيذ برنامج Vector لفهم هذه المنشئات بشكل أفضل.
أساليب المتجه في Java
فيما يلي الطرق التي تدعمها فئة Vector في Java.
اسم الأسلوب | النموذج الأولي | الوصف |
---|---|---|
إضافة | إضافة منطقية (E e) | تضيف عنصرًا معينًا إلى نهاية المتجه. |
إضافة باطلة (فهرس int ، عنصر E) | أضف عنصرًا إلى المتجه في الفهرس المحدد. | |
addAll | Boolean addAll (Collection c) | يضيف كل العناصر من مجموعة معينة إلى نهاية المتجه. |
Boolean addAll (int index، Collection c) | يضيف كل العناصر في المجموعة المحددة في الفهرس المحدد. | |
addElement | addElement (E obj) | يضيف العنصر المحدد في نهاية المتجه بزيادة حجم المتجه. |
السعة | Int القدرات () | إرجاع السعة الحالية لـ المتجه. |
مسح | مسح الفراغ () | يمسح متجه عناصره. |
استنساخ | استنساخ الكائن () | يستنسخ المتجه. |
يحتوي | يحتوي منطقي على (كائن o) | للتحقق مما إذا كان المتجه يحتويعنصر محدد. |
يحتوي على الكل | Boolean يحتوي على All (Collection c) | للتحقق مما إذا كان المتجه يحتوي على جميع العناصر الموجودة في مجموعة معينة. |
copyInto | Void copyInto (Object [] anArray) | ينسخ عناصر المتجه في مصفوفة معينة. |
ElementAt | E ElementAt (int index) | إرجاع عنصر المتجه في الفهرس المحدد. |
العناصر | عناصر التعداد () | إرجاع المكونات التي تم تعدادها للمتجه. |
تأكد من السعة | ضمان باطلالقدرة (int minCapacity) | تزيد من سعة المتجه لتلبية الحد الأدنى من السعة المحددة. |
اسم الأسلوب | النموذج الأولي | الوصف |
---|---|---|
يساوي | Boolean يساوي (Object o) | يقارن المتجه الحالي مع المتجه المحدد للتحقق مما إذا كانا متساويين. |
العنصر الأول | E firstElement () | إرجاع العنصر الأول للمتجه في الفهرس 0. |
احصل على | E get (int index) | إرجاع العنصر في المتجه في الفهرس المحدد. |
hashCode | int hashCode () | إرجاع قيمة رمز التجزئة للمتجه. |
indexOf | int indexOf (Object o) | يعثر على فهرس التواجد الأول للعنصر المحدد في المتجه ؛ -1 إذاالعنصر غير موجود في المتجه. |
int indexOf (Object o، int index) | يبحث في المتجه من الفهرس المحدد في الاتجاه الأمامي للعنصر المحدد ؛ إرجاع فهرس إذا تم العثور على عنصر آخر -1 إذا لم يتم العثور على العنصر. | |
insertElementAt | Void insertElementAt (E obj، int index) | إدراج الكائن المحدد في المتجه في الفهرس المحدد. |
فارغ | منطقي فارغ () | للتحقق مما إذا كان المتجه فارغًا. |
التكرار | Iteratoriterator () | إرجاع مكرر مستخدم لـ اجتياز عناصر المتجه. |
lastElement | E lastElement () | إرجاع العنصر الأخير للمتجه . |
lastIndexOf | Int lastIndexOf (Object o) | يبحث في المتجه عن آخر تواجد لعنصر معين ويعيد الفهرس أو إرجاع -1 لم يتم العثور على العنصر. |
Int lastIndexOf (Object o، int index) | يبدأ البحث عن آخر ظهور للعنصر المحدد من الفهرس المعطى عكسيًا. إرجاع الفهرس إذا تم العثور على عنصر آخر إرجاع -1. | |
listIterator | ListIteratorlistIterator () | إرجاع مكرر قائمة فوق عناصر المتجه. |
ListIteratorlistIterator (فهرس int) | إرجاع مكرر قائمة على عناصر المتجه بدءًا من المعطىالفهرس. |
اسم الأسلوب | النموذج الأولي | الوصف | ||
---|---|---|---|---|
إزالة | إزالة E (فهرس int) | يحذف العنصر في فهرس معين من المتجه. | ||
إزالة منطقية (كائن o) | يحذف التواجد الأول للعنصر المحدد من المتجه. إذا لم يكن العنصر موجودًا ، فلن يحدث شيء للمتجه | |||
removeAll | Boolean removeAll (Collection c) | يحذف جميع العناصر من المتجه التي موجودة في المجموعة المحددة. | ||
void removeAll Elements () | حذف جميع العناصر المتجهة وبالتالي تقليلها إلى الحجم صفر. | |||
removeElement | Boolean removeElement (Object obj) | يزيل التواجد الأول للعنصر المحدد من المتجه. | ||
void removeElementAt (int index) | يحذف العنصر في الفهرس المحدد. | |||
removeRange | إزالة باطل محمية Range (int fromIndex، int toIndex) | يحذف جميع العناصر من المتجه في النطاق المحدد من الفهرس (شامل) ، إلى الفهرس (حصري)> | على عكس "إزالة الكل" ، تحتفظ الطريقة بجميع العناصر الموجودة في المتجه التي تتطابق مع العناصر الموجودة في المجموعة المحددة. ، E element) | يضبط القيمة في فهرس معين بالعنصر الجديد |
عنصر مجموعة باطلة (E obj، int index) | يضبط العناصر المحددة في الفهرس المحدد. | |||
setSize | Void setSize (int newSize) | يعين الحجم المعطى لهذا المتجه. | ||
Size | int size () | تعرض عدد العناصر في هذا المتجه أو طول المتجه. | ||
subList | ListsubList (intfromIndex، inttoIndex) | إرجاع عرض أو قائمة فرعية للمتجه تتراوح من الفهرس إلى الفهرس. () | يحول المتجه المعطى إلى مصفوفة تحتوي على جميع عناصر المتجه بترتيب معين. | |
T [] toArray (T [] a) | إرجاع مصفوفة من النوع المحدد تحتوي على جميع عناصر المتجه. | |||
toString | String toString () | إرجاع تمثيل سلسلة للمتجه. | ||
تقليم الحجم | تقليم الفراغ إلى الحجم () | يقوم بقص المتجه ليلائم الحجم الحالي. |
Vector Implementation
يوضح برنامج Java التالي استخدام جميع طرق المُنشئ الموضحة أعلاه.
import java.util.*; public class Main{ public static void main(String[] args) { //Create vectors v1, v2,v3 and v4 Vector v1 = new Vector(); //a vector with default constructor Vector v2 = new Vector(20); // a vector of given Size //initialize vector v2 with values v2.add(10); v2.add(20); v2.add(30); Vector v3 = new Vector(30, 10); // a vector of given Size and Increment // create a vector v4 with given collection List aList = new ArrayList(); aList.add("one"); aList.add("two"); Vector v4 = new Vector(aList); //print contents of each vector System.out.println("Vector v1 Contents:" + v1); System.out.println("Vector v2 Contents:" + v2); System.out.println("Vector v3 Contents:" + v3); System.out.println("Vector v4 Contents:" + v4); } }
الإخراج:
يحتوي البرنامج أعلاه على أربعة متجهات فيه. يتم إنشاء الإصدار الأول باستخدام مُنشئ افتراضي. يتم إنشاء Vector v2 الثاني بسعة أولية تبلغ 20. ثم يتم إضافة القليل من العناصر إلى v2. يتم إنشاء المتجه الثالث بسعة أولية قدرها 30 وزيادة10.
بعد ذلك ، نقوم بإنشاء ArrayList وإنشاء Vector رابع v4 باستخدام ArrayList كوسيطة لها. أخيرًا ، نعرض محتويات كل من هذه المتجهات.
لاحظ محتويات المتجه الرابع v4. نظرًا لأننا قدمنا ArrayList كوسيطة لها ، فإن محتويات ArrayList تصبح محتويات v4.
مثال متجه كامل
الآن دعنا ننفذ برنامجًا آخر سيوضح إنشاء المتجهات ، إضافة عناصر إليه وعرض محتوياته.
import java.util.*; public class Main { public static void main(String args[]) { //Create an empty Vector of even numbers Vector evenVector= new Vector (); //Add elements in the vector evenVector.add(2); evenVector.add(4); evenVector.add(6); evenVector.add(8); evenVector.add(10); evenVector.add(12); evenVector.add(14); evenVector.add(16); //Display the vector System.out.println("Vector evenVector contents: " +evenVector); //delete the first occurence of an element 4 using remove method System.out.println("\nFirstoccurence of element 4 removed: "+evenVector.remove((Integer)4)); //Display the vector System.out.println("\nVector contents after remove operation: " +evenVector); //Remove the element at index 4 & display the vector System.out.println("\nRemove element at index 4: " +evenVector.remove(4)); System.out.println("\nVector contents after remove: " +evenVector); //hashcode for the vector System.out.println("\nHash code of the vector = "+evenVector.hashCode()); //Get the element at index 1 System.out.println("\nElement at index 1 is = "+evenVector.get(1)); } }
الإخراج:
لنأخذ مثال متجه آخر. في هذا البرنامج ، سنستخدم متجه سلسلة . نتعامل مع هذا المتجه عن طريق إضافة عناصر ثم نطبع حجمه وسعته.
import java.util.*; public class Main { public static void main(String args[]) { // create a vector with initial capacity = 2 Vector fruits_vec = new Vector(2); //add elements to the vector fruits_vec.addElement("Grapes"); fruits_vec.addElement("Melon"); fruits_vec.addElement("Kiwi"); fruits_vec.addElement("Apple"); //print current size and capacity of the vector System.out.println("Vector Size: "+fruits_vec.size()); System.out.println("Default Vector capacity increment: "+fruits_vec.capacity()); //add more elements to the vector fruits_vec.addElement("Orange"); fruits_vec.addElement("Mango"); fruits_vec.addElement("Fig"); //print current size and capacity again System.out.println("Vector Size after addition: "+fruits_vec.size()); System.out.println("Vector Capacity after increment: "+fruits_vec.capacity()); //print vector elements Enumeration fruits_enum = fruits_vec.elements(); System.out.println("\nVector Elements are:"); while(fruits_enum.hasMoreElements()) System.out.print(fruits_enum.nextElement() + " "); } }
الإخراج:
Sort A Vector
يمكنك أيضًا فرز متجه وفقًا لترتيب معين. لفرز المتجه ، يجب عليك استخدام طريقة Collections.sort () من Java Collections Framework.
يوضح المثال التالي الفرز المتجه.
import java.util.*; public class Main { public static void main(String arg[]) { //Create an empty vector Vector oddVector = new Vector(); //Add elements to the vector oddVector.add(1); oddVector.add(11); oddVector.add(7); oddVector.add(3); oddVector.add(5); //print the vector elements System.out.println("Vector elements: "+oddVector); //sort vector using Collections.sort method Collections.sort(oddVector); //print sorted vector System.out.println("Vector elements after sorting: "+oddVector); } }
الإخراج:
ينشئ البرنامج أعلاه متجهًا للأرقام الفردية. ثم باستخدام طريقة Collections.sort () ، يتم فرز المتجه.
المتجه ثنائي الأبعاد (ثنائي الأبعاد)
المتجه ثنائي الأبعاد هو متجه يحتوي على كل عنصر من عناصره كمتجه. يمكن أن يطلق عليه أيضًا "متجه المتجهات".
يوضح المثال أدناه المتجه ثنائي الأبعاد.
import java.util.*; public class Main { public static void main(String args[]) { //define and initialize a vector Vector inner_vec = new Vector(); inner_vec.add("Software"); inner_vec.add("Testing"); inner_vec.add("Java"); inner_vec.add("Tutorials"); //define another vector and add first vector to it. Vector outer_vec = new Vector(); outer_vec.add(inner_vec); String str; //display the contents of vector of vectors System.out.println("Contents of vector of vectors:"); for(int i=0;iOutput:
In the above program, we have a Vector of four elements. Then, we declare another vector and add the previous vector as an element to the second vector. Note the way the elements of the vector is accessed. Form the for loop, you can conclude that the outer vector’s first element (at index 0) is the first or inner vector.
Thus, in the loop, we keep the index of the outer vector as 0 and loop through the inner vector to display all the elements.
Convert Vector To Array
Let’s consider the following example of converting a Vector to an array. To convert a Vector to an Array, we make use of the ‘toArray’ method of the Vector class.
In the following programming example , we declare a string Vector and add elements to it. Then using the toArray method of the Vector class, we convert the Vector to a String array by passing the string array object as an argument.
import java.util.Vector; public class Main { public static void main(String[] args) { // Create a Vector of String elements Vector color_vector = new Vector(); // Add elements to Vector color_vector.add("Violet"); color_vector.add("Indigo"); color_vector.add("Blue"); color_vector.add("Green"); color_vector.add("Yellow"); color_vector.add("Orange"); color_vector.add("Red"); //Convert Vector to String Array using toArray method String[] colorsArray = color_vector.toArray(new String[color_vector.size()]); //print Array Elements System.out.println("String Array Elements :"); for(String val:colorsArray){ System.out.print(val + " "); } } }Output:
Vector vs Array
Enlisted below are some of the differences between a Vector and an Array.
Vector Array Vector is dynamic and its size grows and shrinks as elements are added or removed. Arrays are static and its size remains fixed once declared. Vectors can store only objects. Arrays can store primitive types as well as objects. It provides a size() method to determine the size. Provides length property to determine the length. No concept dimensions but can be created as a vector of vectors, normally called 2d vector. Arrays support dimensions. Vector is synchronized. The array is not synchronized. Vector is slower than the array. Array is faster. Reserves additional storage when capacity is incremented. Does not reserve any additional storage. Ensures type safety by supporting generics. No generic support. Vector vs ArrayList
This section discusses the difference between Vector and ArrayList in Java.
Vector ArrayList Present since the initial version of Java(JDK 1.0 version). Introduced in Java since JDK 1.2 Vector is a legacy class of Java. ArrayList is a part of the Java Collections Framework. Vector grows double its size when its capacity is reached. ArrayList grows by half the size when its capacity is reached. Vector methods are synchronized. ArrayList is not synchronized. Vector uses Enumerator and Iterator for traversing. ArrayList uses only Iterator. Vector operations are slower. ArrayList is faster. Vector has increment size using which vector size can be increased. ArrayList does not provide increment size. Vector is thread-safe which means using Vector from multiple threads is permitted and is safe. ArrayList is not thread-safe. Frequently Asked Questions
Q #1) What is a Vector in Java?
Answer: In Java, a Vector can be defined as a growable array of objects. Similar to arrays, Vector elements can also be accessed using indices.
Q #2) Is vector ordered in Java?
Answer: Yes. A Vector is ordered and maintains the inserting order for elements.
Q #3) Is Vector thread-safe in Java?
Answer: Yes. In Java the Vector class is thread-safe. As the Vector class is synchronized, it makes it thread-safe i.e. you can use the Vector class from multiple threads and it is safe.
Q #4) Why do we use vector in Java?
Answer: The most important reason for which Vector is used in Java is that a Vector grows and shrinks automatically. They are dynamic because of which they are preferred over arrays.
Q #5) Which is better – ArrayList or vector?
Answer: Performance-wise ArrayList is faster when compared to Vector as Vector is synchronized and makes it slower.
Conclusion
In this tutorial, we started with the Vector data structure in Java. Vectors are almost similar to an array in which the Vector elements are accessed using familiar indices. Vectors are called dynamic array and unlike arrays, the Vector size grows and shrinks automatically.
Vectors also have the capacity and increment features that can be used to create and reserve additional storage for future additions. Vector is a legacy class in java.util package of Java and is synchronized as well as thread-safe.
Thus, we should prefer vectors when we need dynamic size and also while we are working in a multi-threaded environment.