Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

ما هو Pointers في جافا؟

هل هو عبارة عن متغير يستخدم لتخزين عنوان عنصر محدد في الذاكرة؟ و هل يمكنكم شرحه لو سمحتم؟

تعليقات 1

1
محمد هرموش

المؤشر (Pointer) هو ميزة موجودة في لغات البرمجة المنخفضة المستوى (Low Level) مثل C و ++C و هو يستخدم للوصول لأي شيء يتم تعريفه في الذاكرة بشكل مباشر و هذا الأمر يجعل أداء برامجك سريع جداً.

شرحناه بالتفصيل في دورة ++C في درس المؤشرات إن أردت شرح مفصل له و لكنه لن يفيدك إطلاقاً إن كنت تتعلم لغة جافا لأن المؤشر ميزة غير موجودة فيها أساساً فهي تعتبر لغة عالية المستوى (High Level).

1
moses fasil

شكراً لك، لكن في أحد الفيديوهات يشرح عن LinkedList و ذكر أن العقدة (node) فيها قسمين:

  • قسم قيمة (value).
  • و قسم مؤشر (pointer) يشير إلا العقدة التالية (next node).

لذالك صار عندي تشوش.

1
محمد هرموش

كلامه كمبدأ صحيح أخي لأن القسم الذي يشير للعقدة التالية يقال له في العادة Pointer و لكن هذا الأمر يختلف مع جافا و سأوضح لك ذلك أكثر.

في لغة جافا يتم الإعتماد على عنوان المرجع (Reference) الذي يقوم مترجم جافا بتسجيله في الذاكرة.

فكرة عنوان المرجع ذكرناها بالتفصيل في المثال الثاني في درس تحويل الأنواع في جافا.


مثال

في المثال التالي قمت بإنشاء كلاس إسمه LinkedList جعلته مخصص لتخزين أعداد، أي سيكون بمثابة مصفوفة لا حجم لها.

class LinkedList {

  // يمثل أول عنصر head الذي يوضع كقيمة في Node الكائن من
  Node head;

  // LinkedList  سيتم تخزينها في الكلاس Node هذا الكلاس يمثل أي
  static class Node {
    // (next) و عنوان العنصر التالي (value) سيملك قيمة Node الكائن من
    int value;
    Node next;

    // value و يمرر القيمة التي نعطيها له في المتغير Node هذا كونستركتور ينشئ
    // لأنني سأقوم بتحديد من هو العنصر التالي بأنفسنا null موضوع next لاحظ أن 
    Node(int d) {
      value = d;
      next = null;
    }

  }


  public static void main(String[] args) {
    // الذي قمت أنا ببنائه و ليس الجاهز في جافا LinkedList هنا أنشت كائن يمثل
    LinkedList linkedList = new LinkedList();

    // head لأنني وضعته في الكائن linkedList قيمته 1 و ضعته كأول عنصر في Node هنا أنشأت
    // و قيمته 3 third آخر إسمه Node و قيمته 2، ثم أنشأت second آخر إسمه Node بعدها أنشأت
    linkedList.head = new Node(1);
    Node second = new Node(2);
    Node third = new Node(3);

    // head الذي يملكه الكائن next في الكائن second هنا أضفت مرجع الكائن
    // linkedList و هذا يعني أنه أصبح العنصر الثاني في الكائن 
    linkedList.head.next = second;

    // head الذي يملكه الكائن next في الكائن third هنا أضفت مرجع الكائن
    // linkedList  و هذا يعني أنه أصبح العنصر الثالث في الكائن 
    second.next = third;

    // linkedList  هنا قمت بعرض جميع قيم العناصر المخزنة في الكائن
    System.out.print("LinkedList: ");
    while (linkedList.head != null) {
      System.out.print(linkedList.head.value + " ");
      linkedList.head = linkedList.head.next;
    }
  }

}

نتيجة التشغيل:

LinkedList: 1 2 3 
0
moses fasil

هل عندما أريد استخدام LinkedList أستخدم هذا الأسلوب أو أكتفي بالكلاس LinkedList الموجود في الحزمة Collection؟

0
محمد هرموش

قاعدة عامة أخي، لا تضيّع أي ثانية من وقتك في إعادة بناء الشيء من الصفر إذا كان متوفر و جاهز للاستخدام.

عن نفسي لم أقم يوماً ببناء هذا الكلاس من الصفر حتى أستخدمه بل أستخدم ما هو جاهز.

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.