أ مترابطة بيانية هي بنية بيانات يمكنها الاحتفاظ بكائنات من أنواع مختلفة. هذه الأشياء ليست مرتبطة ببعضها البعض ولكن لها معنى عندما ننظر إليها بشكل جماعي. في هذا القسم نناقش ما هو الصفوف , الميزات، الحجم، و عمليات من الصفوف. وسنناقش أيضًا تنفيذ Tuple في جافا .
ما هو الصفوف؟
وبشكل عام أ مترابطة بيانية هي مجموعة مرتبة من الكائنات. يتم تخزين البيانات في المجموعة ككائن في مصفوفة بايت منفصلة. تحتوي على قيم مفصولة بفواصل ومحاطة بزوج من الأقواس المربعة []. الصفوف هي غير قابل للتغيير، على عكس بنية بيانات القوائم. يمكن للصفوف أن تحتوي على صفوف متعددة. ويمكن أيضًا اعتباره كائنًا مجهولاً.
مميزات التوبل
يحتوي Tuple على الميزات التالية:
- إنها آمن، قابل للتكرار، غير قابل للتغيير، و قابل للتسلسل .
- يقوم بتنفيذ إلى سلسلة ()، يساوي ()، و رمز التجزئة ()
- كما يقوم بتنفيذ قابلة للمقارنة (تنفذ Tuple قابلة للمقارنة)
مثال الصفوف
دعونا نفكر في المثال التالي.
['Sophia', 'Female', 22, 'Marketing Manager']
الصفوف أعلاه هي أ الرباعية tuple لأنه يحتوي على أربعة العناصر (الأشياء). نلاحظ أن كل كائن من نوع مختلف. ولكن عندما ننظر إليها بشكل جماعي، فإن لها معنى محددا. يمثل الصف أعلاه بيانات الموظف مثل الاسم والجنس والعمر والمنصب.
دعونا نرى بعض الأمثلة الأخرى من الصفوف.
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Tuple في جاوة
في Java، الصف عبارة عن بنية بيانات عامة تتعامل مع كل عنصر ككائن، ويتم تخزين هذه الكائنات في مصفوفة بايت منفصلة. وبعبارة أخرى، يمكننا أن نقول أيضا أن الصف هو أمر جمع الكائنات من أنواع مختلفة.
يمكن تنفيذ وظيفة الصف باستخدام بنية بيانات القائمة والصفيف، لكن هياكل البيانات هذه لا تحتوي على أنواع مختلفة من أنواع البيانات حسب التصميم. ومن هنا فمن الواضح أن غير متجانسة tuple باستخدام بنية بيانات قياسية (قائمة/مصفوفة) غير ممكن في Java. منذ أن طلبنا مترابطة بيانية بنية البيانات للوفاء بمتطلبات عقد متجانس بنية البيانات.
لاحظ أن بنية بيانات Tuple غير موجودة في برمجة Java ، بشكل افتراضي. ولكن يمكننا تنفيذ بنية بيانات Tuple باستخدام مكتبة الطرف الثالث المسماة javatuples .
قبل الانتقال إلى التنفيذ، سنقوم أولاً بتنزيل الملف javatuples.jar ملف. وأضف هذا الملف إلى مسار المشروع.
يمكننا أيضًا استخدام التبعية التالية في pom.xml ملف لتنفيذ بنية بيانات tuples في Java.
org.javatuples javatuples 1.2
دعونا ننفذ Tuple وننشئ برنامج Java Tuple بسيط.
مكتبة جافاتوبلز
ال javatuples تحتوي المكتبة على فئات الصف التي تتوافق مع حجم الصف. قد تكون الصفوف مختلفة في الحجم. قد تحتوي المجموعة على الحد الأقصى 10 عناصر. يختلف تنفيذ كل صف. التسلسل الهرمي للفئة على النحو التالي.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
فئة جافا Tuple
ال مترابطة بيانية هي فئة أساسية مجردة لجميع فئات الصف التي تنتمي إليها org.javatuples طَرد. جميع أساليب فئة Tuple عامة ونهائية. يلخص الجدول التالي أساليب فئة Tuple. ينفذ واجهات Iterable وSerializable.
طريقة | بناء الجملة | وصف |
---|---|---|
يتضمن() | يحتوي المنطق المنطقي النهائي العام على (java.lang.Object value) | يتحقق مما إذا كان الصف يحتوي على عنصر محدد أم لا. |
يحتوي على الكل () | المنطقية النهائية العامة تحتوي على الكل (مجموعة java.util.Collection) | يتم إرجاعه صحيحًا إذا كان هذا الصف يحتوي على كافة عناصر المجموعة المحددة (قائمة/مصفوفة). |
يساوي () | القيمة المنطقية النهائية العامة تساوي (java.lang.Object obj) | يتجاوز يساوي () طريقة فئة الكائن. |
الحصول على الحجم () | الملخص العام int getSize() | تقوم بإرجاع حجم Tuple. |
الحصول على قيمة() | java.lang.Object getValue(int pos) النهائي العام | احصل على القيمة في موضع محدد في الصف. يجب أن تقوم هذه الطريقة بإرجاع الكائن، لذا باستخدامها ستفقد أمان الكتابة الذي تحصل عليه مع getValueX() طُرق. |
رمز التجزئة () | hashCode النهائي العام () | تقوم بإرجاع رمز التجزئة للسلسلة. إنه يتجاوز رمز التجزئة () طريقة فئة الكائن. |
دليل ل() | مؤشر int النهائي العام (java.lang.Object value) | تقوم بإرجاع الفهرس ضمن هذه السلسلة للتواجد الأول للسلسلة الفرعية المحددة. |
مكرر () | java.util.Iterator iterator() النهائي العام | تقوم بإرجاع مكرر فوق العناصر الموجودة في هذه المجموعة بالتسلسل الصحيح. |
مؤشر الفهرس الأخير () | العام النهائي int lastIndexOf (java.lang.Object value) | تقوم بإرجاع الفهرس ضمن هذه السلسلة للتواجد الأخير للسلسلة الفرعية المحددة. |
لمجموعة() | java.lang.Object[] toArray() النهائي العام | يقوم بتحويل الصفوف إلى مصفوفة. |
إلى سلسلة() | java.lang.String toString () النهائي العام | تقوم بإرجاع تمثيل سلسلة للكائن. يتجاوز طريقة toString() لفئة الكائن. |
لإدراج() | java.util.List toList() النهائي العام | يقوم بتحويل Tuple إلى قائمة. |
الفئات الفرعية المعروفة المباشرة
حجم الصفوف | اسم فئة Tuple | مثال |
---|---|---|
عنصر واحد | وحدة | وحدة |
عنصرين | زوج | زوج |
ثلاثة عناصر | ثلاثية | ثلاثية |
أربعة عناصر | الرباعية | الرباعية |
خمسة عناصر | الخماسية | الخماسية |
ستة عناصر | السداسية | السداسية |
سبعة عناصر | سبعة | سبعة |
ثمانية عناصر | ثماني | ثماني |
تسعة عناصر | إينيد | إينيد |
عشرة عناصر | عقد | عقد |
إلى جانب الفئات المذكورة أعلاه، هناك فئتان إضافيتان توفرهما مكتبة javatuples، أي. قيمة المفتاح و قيمة التسمية . هاتان الفئتان متشابهتان زوج فئة وتوفر نفس الوظيفة ولكن في دلالات مختلفة.
تنفذ كل فئة Tuple الواجهات الثلاث التالية:
مشتق جزئي من اللاتكس
- متوقعة
- قابلة للمقارنة
- قابل للتسلسل
تنفيذ Tuple
إن تنفيذ Tuple في Java سهل للغاية. يتعين علينا إنشاء مثيل لفئة Tuple التي تتوافق مع الحجم.
TupleExample.java
import org.javatuples.Quartet; public class TupleExample { public static void main(String args[]) { //create a pair tuple from the constructor Quartet quartet = new Quartet('Sophia', 'Female', 22, 'Marketing Manager'); //print the tuples objects System.out.println('The details of the employee are: ' + quartet); } }
انتاج:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
عمليات التوبل
يمكن تنفيذ العمليات التالية على Tuple:
- إنشاء Tuple
- الحصول على القيم
- تحديد القيم
- إضافة عناصر
- التكرار على Tuple
- تحويل Tuple إلى قائمة
- البحث في Tuple
إنشاء Tuple
هناك ثلاث طرق لإنشاء Tuple:
- باستخدام طريقة with()
- باستخدام المنشئ
- باستخدام المجموعة
دعونا نرى الطرق الثلاث المذكورة أعلاه لإنشاء صف.
باستخدام طريقة with()
توفر مكتبة javatuples مع() الطريقة التي تنشئ صفًا بالقيم المحددة. الطريقة تابعة ل org.javatuples.Pair طَرد. يتم استخدامه لإنشاء كائنات ذات قيم.
بناء الجملة:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
مثال:
Pair pair = Pair.with('iPhone 12', 112000.00);
ينشئ كائن فئة الزوج أعلاه صفًا بقيمتين. لنقم بإنشاء برنامج Java لنفسه.
CreateTupleExample1.java
import org.javatuples.Pair; class CreateTupleExample1 { public static void main(String args[]) { Pair pair = Pair.with(9086651, 'Dell Laptop'); System.out.println(pair); } }
انتاج:
[9086651, Dell Laptop]
باستخدام المنشئ
في هذه الحالة، نقوم بإنشاء مُنشئ للفئة، وفقًا للمتطلبات.
يبدأ بجافا
بناء الجملة:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
مثال:
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
لنقم بإنشاء برنامج Java لإنشاء صف باستخدام المُنشئ.
CreateTupleExample2.java
import org.javatuples.Quintet; class CreateTupleExample1 { public static void main(String args[]) { Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4); System.out.println(quintet); } }
انتاج:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
باستخدام المجموعة
تتيح لنا مكتبة javatuples إنشاء صف من المجموعة باستخدام ملف من المجموعة () طريقة. كما يسمح لنا بإنشاء صف من مصفوفة باستخدام منصفيف () طريقة. لاحظ أن المجموعة/المصفوفة يجب أن يكون لها نفس النوع والقيم مثل المجموعة.
يجب أن يكون للمجموعة/المصفوفة نفس نوع Tuple ويجب أن يتطابق عدد القيم في المجموعة/المصفوفة مع فئة Tuple.
بناء الجملة:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
مثال:
Octet p1 = Octet.fromCollection(list); Sextet p2 = Sextet.fromArray(arr);
CreateTupleExample3.java
import java.util.ArrayList; import java.util.List; import org.javatuples.Sextet; import org.javatuples.Octet; class CreateTupleExample3 { public static void main(String args[]) { //creating a list List list = new ArrayList(); //adding elements to the list list.add('C'); list.add('C++'); list.add('Java'); list.add('Python'); list.add('Scala'); list.add('Ruby'); list.add('PHP'); list.add('COBOL'); //creating an object of Pair class and passing the list Octet p1 = Octet.fromCollection(list); //creating an Array String[] arr = {'One', 'Two', 'Three', 'Four', 'Five', 'Six'}; //creating an object of the Pair class and invoking the fromArray() method Sextet p2 = Sextet.fromArray(arr); //prints the tuple created using list System.out.println(p1); //prints the tuple using Array System.out.println(p2); } }
انتاج:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
الحصول على القيم
تتيح لنا مكتبة javatuples أيضًا جلب القيم من المجموعة في الفهرس المحدد باستخدام ملف getValueX() طريقة. حيث تشير X إلى قيمة الفهرس للكائن. الفهرسة تبدأ من 0.
مثال:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
GetValueExample.java
import org.javatuples.Pair; class GetTupleValue { public static void main(String args[]) { //creating a tuple Pair pair = Pair.with(12, 'Andrew'); //getting values at index 1 System.out.println(pair.getValue1()); } }
انتاج:
[Andrew]
تعيين القيم
كما ناقشنا أعلاه، فإن الصفوف غير قابلة للتغيير. وبالتالي، لا يمكن تعديلها بعد إنشائها. للتغلب على المشكلة، توفر مكتبة javatuples setValueX() طريقة. حيث X هي قيمة الفهرس التي نريد تعيين القيمة المحددة عندها. تقوم الطريقة بإنشاء نسخة من الصف بالقيمة المضافة حديثًا في الفهرس المحدد وإرجاع نفس الصف.
مثال:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
SetValueExample.java
import org.javatuples.Pair; class SetTupleValue { public static void main(String args[]) { //creating a tuple Pair p1 = Pair.with(67, 69); //setting tuple value at index 1 Pair p2 = p1.setAt1(68); System.out.println(p2); } }
انتاج:
[67, 68]
إضافة قيمة
هناك طريقتان لإضافة القيم في Tuple:
ما هي أبعاد شاشة الكمبيوتر الخاص بي
- في نهاية الصفوف
- في مؤشر محدد
في نهاية التوبل
توفر مكتبة javatuples يضيف() طريقة لإضافة كائنات إلى Tuple. يضيف الكائن في نهاية الصف ويعيد صفًا جديدًا عن طريق مطابقة عدد العناصر.
لنفترض أن لدينا صفًا يحتوي على عنصرين ونريد إضافة عنصر آخر إلى الصف. في مثل هذه الحالة، لن يدعم الصفوف الزوجية العنصر الثالث. لذلك، عندما نضيف عنصرًا إلى صف مزدوج، يتم تحويله إلى صف ثلاثي. دعونا نرى مثالا.
AddElementInTuple.java
import org.javatuples.Pair; import org.javatuples.Triplet; public class AddElementInTuple { public static void main(String args[]) { Pair pair = Pair.with('Jack', 46); Triplet triplet = pair.add('Finance Professional'); System.out.println(pair); System.out.println(triplet); } }
انتاج:
[Jack, 46] [Jack, 46, Finance Professional]
يمكننا أيضًا إضافة صف واحد إلى صف آخر. فهو يزيد من عدد العناصر في المجموعة التي تم إنشاؤها حديثًا. ومن ثم، فإنها تُرجع نوع الصف بناءً على عدد العناصر الموجودة بعد الإضافة.
AddTuplesExample.java
import org.javatuples.Quartet; import org.javatuples.Septet; import org.javatuples.Triplet; public class AddTuplesExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('Mango', 'Grapes', 'Papaya'); //creating an object of quartet tuple and adding an elements at index-1 in triplet tuple Quartet quartet = triplet.addAt1('Banana'); //adding quartet and triplet tuple we get a septet tuple i.e. 3+4=7 //the following statement can be written as Septet septet = quartet.add(triplet); Septet septet = quartet.add(triplet); System.out.println(triplet); System.out.println(quartet); System.out.println(septet); } }
انتاج:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
في الفهرس المحدد
بشكل افتراضي، تتم إضافة عناصر جديدة في نهاية الصف. ولكن يمكننا إضافة عناصر في الفهرس المحدد باستخدام إضافة () طريقة.
AddAtIndexExample.java
import org.javatuples.Quartet; import org.javatuples.Triplet; public class AddAtIndexExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('MCA', 'M.Sc.', 'MBBS'); //creating an object of quartet tuple and adding an element at index-2 in triplet tuple Quartet quartet = triplet.addAt2('M.Tech'); System.out.println(triplet); System.out.println(quartet); } }
انتاج:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
البحث عن عنصر
يمكننا أيضًا البحث عن عنصر موجود في الصف. للبحث في مكتبة javatuples توفر يتضمن() طريقة فئة Tuple. تقوم بإرجاع قيمة منطقية حقيقي إذا كان العنصر موجودًا، فسيتم إرجاعه خطأ شنيع . دعونا نرى مثالا.
SearchingElementExample.java
import org.javatuples.Pair; class SearchingElementExample { public static void main(String args[]) { Pair pair = Pair.with(34, 'Jack'); //returns true because Jack is present in tuple boolean res1 = pair.contains('Jack'); //returns false because Andrew is not present in tuple boolean res2 = pair.contains('Andrew'); System.out.println(res1); System.out.println(res2); } }
انتاج:
true false
تحويل Tuple إلى مجموعة أو صفيف
تحتوي كل فئة صفية على أساليب asList() وtoArray() التي تُرجع القائمة والمصفوفة على التوالي. دعونا نرى مثالا.
TupleToCollection.java
حالة بوابة
import java.util.Arrays; import java.util.List; import org.javatuples.Quartet; public class TupleToCollection { public static void main(String args[]) { //Convert to list Quartet quartet = Quartet.with('Dog', 12,'German Shepherd', 23.89); //converts to list List list = quartet.toList(); //prints list System.out.println(list); //Converts to array Object[] quartletArr = quartet.toArray(); //prints array System.out.println(Arrays.toString(quartletArr)); } }
انتاج:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
لاحظ أن الصف يمكن أن يحتوي على أنواع غير متجانسة وبالتالي فإن النوع الناتج سيكون من قائمة أو هدف[] وفقاً لذلك.
التكرار على Tuple
تقوم جميع فئات Tuple بتنفيذ متوقعة واجهه المستخدم. لذا، يمكننا تكرار الصف بنفس طريقة تكرار المجموعات أو المصفوفات.
IterateTuple.java
import org.javatuples.Quartet; class IterateTuple { public static void main(String args[]) { //creating a quartet tuple Quartet quartet = Quartet.with('Dell', 5600.00, 34, 'Digital Solutions'); //iterate over tuple for(Object obj : quartet) { //prints elements System.out.println(obj); } } }
انتاج:
Dell 5600.0 34 Digital Solutions
الصفوف مقابل. القائمة/المصفوفة
مترابطة بيانية | قائمة |
---|---|
إنها مجموعة من القيم المفصولة بفواصل والمحاطة بها أقواس . | إنها مجموعة من القيم المفصولة بفواصل والمحاطة بها أقواس مربعة . |
الأقواس هي خياري . | بين قوسين مربعين هي إلزامي . |
إنها غير قابل للتغيير . | إنها متقلب . |
يتطلب أقل ذاكرة. | يتطلب المزيد من الذاكرة. |
لقد أقل طرق المصنع . | لقد أكثر طرق المصنع . |
لديها مُثَبَّت طول. | لقد عامل أطوال. |
يخزن غير متجانسة بيانات. | يخزن متجانس بيانات. |
انها مناسبة ل كبير كميات من البيانات. | انها مناسبة ل صغير كمية البيانات. |
يمكن تخزينه في قائمة . | يمكن تخزينه داخل مترابطة بيانية . |
إنها أسرع بالمقارنة مع القائمة. | إنها أبطأ بالمقارنة مع الصفوف. |
يتم تمثيله ك t1 = (1، 2، 3، 4، 5) | يتم تمثيله ك l1 = [1، 2، 3، 4، 5] |