[java] ما هو الفرق بين المجموعة والقائمة؟


12 Answers

╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Question

ما هو الفرق الأساسي بين واجهات Set<E> و List<E> ؟




قائمة:
تسمح القائمة بالعناصر المكررة والقيم الخالية. من السهل البحث باستخدام الفهرس المقابل للعناصر وكذلك سيتم عرض العناصر في ترتيب الإدراج. على سبيل المثال: (قائمة متصلة)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

انتاج:

1
1
555
333
888
555
لا شيء
لا شيء
القيمة: 1
القيمة: 555
القيمة: 333
القيمة: 888
القيمة: 555
القيمة: باطل
القيمة: باطل

جلس:
لا يسمح تعيين أي عناصر مكررة ويسمح بقيمة فارغة واحدة. لن يحتفظ بأي ترتيب لعرض العناصر. سيتم عرض TreeSet بترتيب تصاعدي فقط.

على سبيل المثال: (TreeSet)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

انتاج:

الكل
مرحبا
أهلا بك
العالمية
java.lang.NullPointerException
لا تسمح المجموعة بالقيمة الخالية والقيمة المكررة




قائمة:

  1. المسموح بها مكررة.
  2. أمرت في تجميع العناصر. (وبعبارة أخرى وجود ترتيب محدد. لا حاجة لفرز بترتيب تصاعدي)

جلس:

  1. غير مسموح بالتكرار.
  2. غير مرتبة في عناصر التجميع (بمعنى آخر ليس لها ترتيب محدد. قد تكون مرتبة أو غير مرتبة بترتيب تصاعدي)



الفرق على أساس النقاط التالية

1) التكرار: تسمح القائمة بالعناصر المكررة. يمكن إدراج أي عدد من العناصر المكررة في القائمة دون التأثير على نفس القيم الموجودة والفهارس الخاصة بهم. لا يسمح التعيين بالنسخ المكررة. يجب أن تحتوي كل الفئات التي تنفذ واجهة Set على عناصر فريدة.

2) القيم الخالية: تسمح القائمة بأي عدد من القيم الخالية. مجموعة تسمح قيمة فارغة واحدة على الأكثر.

3) النظام: قائمة وجميع فئات تنفيذها تحافظ على ترتيب الإدراج. مجموعة لا تحافظ على أي أمر ؛ لا يزال عدد قليل من فصولها فرز العناصر في ترتيب مثل LinkedHashSet يحافظ على العناصر في ترتيب الإدراج.




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

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




هنا مثال واضح مع groovy. أنا إنشاء مجموعة وقائمة. ثم أحاول تخزين 20 قيمة تم إنشاؤها بشكل عشوائي داخل كل قائمة. يمكن أن تكون القيمة التي تم توليدها في النطاق من 0 إلى 5

s = [] as Set
l = []

max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}


println "\n"
println "Set : $s "
println "list : $l

النتائج :

أرقام عشوائية: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

المجموعة: [4, 1, 0, 2, 3]

القائمة: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

يمكنك أن ترى أن الفرق هو:

  • لا يسمح الخيار بالقيم المكررة.
  • قائمة تسمح للقيم المتكررة.



لا يمكن أن تحتوي المجموعة على عناصر مكررة في حين أن القائمة يمكن. قائمة (في جافا) تعني أيضا النظام.




قائمة مع مجموعة

1) لا تسمح المجموعة بالتكرار. قائمة تسمح مكررة. استناداً إلى تطبيق Set ، فإنه يحتفظ أيضاً "ترتيب الإدراج".

على سبيل المثال: LinkedHashSet . يحافظ على أمر الإدراج. الرجاء الرجوع انقر هنا

2) يحتوي على طريقة. حسب طبيعة مجموعة ستعطي أداء أفضل للوصول. أفضل حالة لها س (1). ولكن قائمة تحتوي على مشكلة الأداء لاستدعاء contains .




المجموعة عبارة عن مجموعة غير مرتبة من الكائنات المميزة - لا يُسمح بكائنات مكررة. يتم تطبيقه بشكل عام باستخدام رمز التجزئة للكائنات التي يتم إدخالها. (قد تضيف عمليات التنفيذ المحددة طلبًا ، إلا أن واجهة Set نفسها لا.)

القائمة عبارة عن مجموعة مرتبة من الكائنات التي قد تحتوي على نسخ مكررة. يمكن تنفيذها مع ArrayList ، LinkedList ، إلخ.




طلب ... قائمة لديها طلب ، لا مجموعة.




قائمة

  1. هو مجموعة مرتبة من العناصر.
  2. يتم استخدام القائمة لجمع العناصر مع التكرارات.
  3. يتم تعريف طرق جديدة داخل واجهة القائمة.

جلس

  1. هو مجموعة غير مرتبة من العناصر.
  2. يتم استخدام مجموعة لجمع العناصر دون تكرار.
  3. لا توجد طرق جديدة يتم تعريفها داخل واجهة المجموعة ، لذلك يتعين علينا استخدام أساليب واجهة المجموعة فقط مع تعيين الفئات الفرعية.



كما نتحدث عن واجهات جافا ، لماذا لا ننظر إلى Javadoc ؟!

  • List عبارة عن مجموعة مرتبة (تسلسل) ، والتي عادة ما تسمح بالنسخ المكررة
  • Set أ هي عبارة عن مجموعة لا تحتوي على عناصر مكررة ، وقد يتم ضمان طلب التكرار بواسطة التطبيق

لا يوجد أي ذكر عن عدم وجود نظام بشأن مجموعات: ذلك يعتمد على التنفيذ.




جلس:

لا يمكن أن يكون لديك قيم مكررة يعتمد الطلب على التنفيذ. بشكل افتراضي لا يتم طلبها لا يمكن الوصول إليها عن طريق الفهرس

قائمة:

يمكن أن يكون لها قيم مكررة يتم الترتيب لها بشكل افتراضي يمكن الوصول إليها عن طريق الفهرس




Related



Tags

java java   list   set