"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > [قارن الرمز] Collections.singletonList vs List.of

[قارن الرمز] Collections.singletonList vs List.of

تم النشر بتاريخ 2024-08-07
تصفح:115

[Code Compare] Collections.singletonList vs List.of

في هذه السلسلة من المنشورات، أقوم بمقارنة طرق مختلفة لترميز نفس الوظيفة. آخر مشاركة قارنت Collections.singletonList وArrayList لإنشاء قائمة ذات عنصر واحد.

في هذا المنشور سأقارن Collections.singletonList مع طريقة مصنع أخرى معروفة، List.of.

المجموعات::singletonList

توقيع الطريقة

قائمة ثابتة عامة قائمة مفردة (T o)

  public static void main(String[] args) {
    final var addresses = Collections.singletonList(
        new Address(
            "742 Evergreen Terrace",
            "Springfield",
            "New York",
            "13468",
            "US"
        ));

    System.out.println(addresses);
  }

وصف

تقوم هذه الطريقة بإرجاع قائمة غير قابلة للتغيير تحتوي على الكائن المحدد فقط. تم تقديمه في Java 1.3. تمت تغطية المزايا التي توفرها ArrayList في المشاركة الأخيرة، ولكن للتلخيص:

  1. التنفيذ المضمن: التهيئة بالعنصر المطلوب في سطر واحد.
  2. الثبات: لا يمكن تغيير حجم القائمة ومحتوى عنصرها الفردي.
  3. تخصيص الذاكرة: تحتوي فئة SingletonList على حقل واحد فقط للعنصر الواحد.
  4. استخدام وحدة المعالجة المركزية: يقبل منشئ SingletonList العنصر الفردي كمعلمة، ولا يتطلب تغيير الحجم أو التحكم في المصفوفة.

قائمة من

توقيع الطريقة

قائمة ثابتة من ()

  public static void main(String[] args) {
     final var addresses2 = List.of(
        new Address(
            "1007 Mountain Drive",
            "Bristol Township",
            "New Jersey",
            null,
            "US"
        ));

    System.out.println(addresses2);
  }

وصف

طريقة List.of(E e) هي أيضًا طريقة مصنع تقوم بإرجاع قائمة غير قابلة للتعديل. على عكس Collections.singletonList(E e)، الذي يدعم عنصرًا واحدًا فقط، يدعم List.of 0 إلى 10 عناصر، بالإضافة إلى المصفوفات التي تحتوي على عناصر متعددة. تم تقديمه في Java 9، بعد 17 عامًا من SingletonList.

من المثير للاهتمام أنه، على عكس SingletonList، الذي يحتوي على التعليق:

يُرجع قائمة غير قابلة للتغيير تحتوي على الكائن المحدد فقط.

ينص Array.of على أنها قائمة غير قابلة للتعديل:

إرجاع قائمة غير قابلة للتعديل تحتوي على عنصر واحد.

يعكس هذا فهمًا جديدًا لثبات المجموعات. وفقا لهذه الوثائق:

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

على الرغم من هذه الاختلافات في المصطلحات، فإن كلتا طريقتي المصنع لهما نفس الوظيفة تقريبًا. إذا نظرنا بشكل أعمق داخل القائمة غير القابلة للتعديل، يمكننا أن نجد:

  static  List of(E e1) {
      return new ImmutableCollections.List12(e1);
  }

يا لها من مفاجأة، فقد اختاروا المصطلح غير الدقيق غير قابل للتغيير، رغم ذلك!

  static final class List12 extends     
    AbstractImmutableList implements Serializable {

        @Stable
        private final E e0;

        @Stable
        private final E e1;

        List12(E e0) {
            this.e0 = Objects.requireNonNull(e0);
            this.e1 = null;
        }
        ...
    }
static abstract class AbstractImmutableList extends
  AbstractImmutableCollection implements List, RandomAccess {

      // all mutating methods throw UnsupportedOperationException
      @Override public void    add(int index, E element) { throw uoe(); }
      @Override public boolean addAll(int index, Collection extends E> c) { throw uoe(); }
      @Override public E       remove(int index) { throw uoe(); }
      @Override public void    replaceAll(UnaryOperator operator) { throw uoe(); }
      @Override public E       set(int index, E element) { throw uoe(); }
      @Override public void    sort(Comparator super E> c) { throw uoe(); }

الفرق الوحيد هو أن List12 يحتوي على حقلين لعنصرين محتملين، مما يؤدي أيضًا إلى بصمة ذاكرة ضئيلة ما لم تتعامل مع كائنات كبيرة.

خاتمة

هذه المرة، قمنا بمقارنة طرق Collections.singletonList وList.of Factory لإنشاء قائمة مكونة من عنصر واحد. ناقشنا دلالات غير قابل للتغيير و غير قابل للتعديل وأظهرنا أن كلا الطريقتين فعالتان وموجزتان وخفيفتان للموارد. إذا كان بإمكانك استخدام إصدار Java أحدث، فمن الأفضل أن يكون مألوفًا ووضوحًا ولأننا نستخدم واجهة القائمة أكثر بكثير من المجموعات. إذا اقتصر الأمر على إصدار Java الأقدم، فستظل Collections.singletonList خيارًا قويًا.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/leandrostl/code-compare-collectionssingletonlist-vs-listof-385?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3