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




كلمة بالعربية (22)

List عبارة عن سلسلة متوالية من العناصر ، بينما Set هي قائمة مميزة بالعناصر غير مرتبة (شكرا لك ، كوين تايلور ).

List<E>:

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

Set<E>:

مجموعة لا تحتوي على عناصر مكررة. بشكل أكثر رسمية ، لا تحتوي المجموعات على زوج من العناصر e1 و e2 مثل e1.equals (e2) ، وعلى الأكثر عنصر واحد فارغ. كما يتضح من اسمها ، تقوم هذه الواجهة بتجميع التجميع الحسابي للمجموعة.

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


قائمة

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

جلس

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

مرحباً ، لقد تم تقديم العديد من الإجابات ... دعوني أوضح بعض النقاط التي لم يتم ذكرها حتى الآن:

  • معظم تطبيقات القائمة (ArrayList ، Vector) تقوم بتطبيق واجهة RandomAccess وهي عبارة عن واجهة علامة للوصول بشكل أسرع. أي من تطبيقات القائمة تفعل ذلك.
  • تستخدم القائمة Iterator خاصة تسمى ListIterator الذي يدعم التكرار في كلا الاتجاهين . مجموعة يستخدم Iterator الذي يدعم فقط 1 طريقة التكرار
  • يأخذ HashSet ذاكرة أكثر بمقدار 5.5 مرات من ArrayList لتخزين نفس العدد من العناصر.

تحتفظ كل فئات القائمة بترتيب الإدراج. يستخدمون تطبيقات مختلفة تعتمد على الأداء وخصائص أخرى (مثل ArrayList لسرعة الوصول إلى مؤشر معين ، LinkedList للحفاظ على النظام ببساطة). نظرًا لعدم وجود مفتاح ، يُسمح بالنسخ المكررة.

لا تحتوي فئات Set على ترتيب الإدراج. قد تفرض اختياريًا طلبًا محددًا (كما هو الحال مع SortedSet ) ، ولكن عادةً ما يكون ترتيبًا محددًا بالتنفيذ بناءً على بعض وظيفة التجزئة (كما هو الحال مع HashSet ). نظرًا Set يتم الوصول إلى Set s عن طريق المفتاح ، لا يُسمح بالنسخ المكررة.


1.List يسمح للقيم المتكررة ووضع does'nt تسمح التكرارات

2.List يحافظ على الترتيب الذي أدرجت فيه عناصر في قائمة Set'nt الحفاظ على النظام. 3.List هو ترتيب متسلسل للعناصر في حين أن Set هي قائمة مميزة من العناصر غير مرتبة.


قائمة:

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

جلس:

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

قوائم مرتبة من العناصر (فريدة أم لا)
تتفق مع واجهة جافا المسماة List
يمكن الوصول إليها عن طريق الفهرس

implemetented باستخدام

  • قائمة متصلة
  • ArrayList

قوائم العناصر الفريدة:
تتفق مع واجهة جافا المسماة Set
لا يمكن الوصول إليها عن طريق الفهرس

implemetented باستخدام

  • HashSet (غير مرتبة)
  • LinkedHashSet (أمر)
  • TreeSet (مرتبة حسب ترتيب طبيعي أو من خلال المقارنة المتوفرة)

تتطابق كلتا الواجهتين Set and List مع واجهة Java المسماة Collection


اسم الموضوع: قائمة VS Set

لقد انتهيت للتو من خلال أهم موضوع في Java يسمى Collections Framework. فكرت في مشاركة معرفتي الصغيرة عن المجموعات معك. قائمة ، تعيين ، خريطة هي الموضوع الأكثر أهمية من ذلك. لذلك دعونا نبدأ مع قائمة وتعيين.

الفرق بين القائمة ومجموعة:

  1. القائمة عبارة عن فئة مجمعة تمتد لفئة AbstractList حيث أن Set هي فئة مجمعة تمتد لفئة AbstractSet ولكنها تقوم بتنفيذ واجهة المجموعة.

  2. تسمح واجهة القائمة بالقيم المكررة (العناصر) بينما لا تسمح واجهة المجموعة بالقيم المكررة. في حالة وجود عناصر مكررة في Set ، تستبدل القيم الأقدم.

  3. واجهة القائمة تسمح قيم NULL حيث لا تسمح واجهة Set بالقيم الخالية. في حالة استخدام القيم الخالية في تعيين يعطي NullPointerException .

  4. واجهة القائمة يحافظ على ترتيب الإدراج. وهذا يعني الطريقة التي نضيف بها العناصر في القائمة بالطريقة نفسها التي نحصل عليها باستخدام أداة التكرار أو كل نمط. في حين أن Set التطبيقات لا يحافظ بالضرورة على أمر الإدراج. (على الرغم من أن SortedSet يستخدم TreeSet ، و LinkedHashSet يحافظ على ترتيب الإدراج).

  5. واجهة القائمة لديها طرق خاصة بها محددة في حين أن واجهة المجموعة لا تملك طريقة خاصة بها لذلك يستخدم Set interface methods interface methods فقط.

  6. تحتوي واجهة القائمة على فئة قديمة تسمى Vector بينما لا تحتوي واجهة Set على أي فئة قديمة

  7. أخيرًا وليس آخر ... لا يمكن استخدام طريقة listIterator() إلا للدورة عبر العناصر ضمن فئات القائمة ، بينما يمكننا استخدام طريقة () المكرر للوصول إلى عناصر فئة المجموعة

أي شيء آخر يمكن أن نضيف؟ أخبرونى من فضلكم.

شكر.


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

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

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

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


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

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


يتم إعطاء عدد قليل من الاختلافات جدير بالملاحظة بين القائمة ومجموعة في Java كالتالي:

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

2) اختلاف كبير آخر بين القائمة ومجموعة في جافا هو النظام. القائمة عبارة عن مجموعة مرتبة بينما تعد Set مجموعة غير مرتبة. تحتفظ القائمة بترتيب الإدراج للعناصر ، يعني أن أي عنصر يتم إدخاله قبل الانتقال إلى فهرس أقل من أي عنصر يتم إدخاله بعد. لا يوجد في Java أي ترتيب. على الرغم من أن Set توفر بديلاً آخر يسمى SortedSet والذي يمكنه تخزين عناصر Set في ترتيب فرز محدد محدد بواسطة أساليب المقارنة والمقارنة للكائنات المخزنة في Set.

3) تنفيذ شعبية واجهة قائمة في جاوة يشمل ArrayList ، Vector و LinkedList. بينما يتضمن التنفيذ الشائع لواجهة Set HashSet و TreeSet و LinkedHashSet.

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


مثل الإجابة على النحو SET ليس لديها قيمة مكررة ويمكن لقائمة. بالطبع ، النظام هو شيء آخر مختلف عن بعضها.


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


  • القائمة هي مجموعة مرتبة من العناصر
  • المجموعة هي مجموعة غير مرتبة من العناصر مع عدم السماح بالتكرار (عادةً)

من الناحية النظرية ، نشير عادة إلى مجموعة غير مرتبة تسمح بالنسخ المكررة كحقيبة ولا تسمح بالتكرار هي مجموعة.


يتم استخدام كل من Set<E> List<E> لتخزين عناصر من النوع E الفرق هو أن Set يتم تخزينها بطريقة غير مرتبة ولا تسمح بقيم مكررة. يتم استخدام القائمة لتخزين العناصر بطريقة مرتبة كما أنها تسمح بقيم مكررة.

لا يمكن الوصول إلى عناصر Set بواسطة موضع فهرس ، ويمكن الوصول إلى عناصر List بموضع فهرس.


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

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


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

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

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


نفاق

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

القيم الخالية

List allows any number of null values.
Set allows single null value at most

طلب

قائمة وجميع فئات تنفيذها تحافظ على ترتيب الإدراج. لا تحافظ المجموعة على أي ترتيب لا يزال قليلًا من فصولها ، حيث تقوم بفرز العناصر في ترتيب مثل LinkedHashSet تحتفظ بالعناصر بترتيب الإدراج و TreeSet (تحتفظ العناصر بالترتيب التصاعدي بشكل افتراضي)

تطبيقات الطبقة

List: ArrayList, LinkedList 
Set: HashSet, LinkedHashSet, TreeSet 

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

هنا مثال واضح مع 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. يناير 1928 ، 00:00:00 تم تحويل الساعات إلى الوراء 0:05:52 ساعة إلى يوم السبت 31 ديسمبر 1927 ، 23:54:08 التوقيت القياسي المحلي بدلاً من ذلك

هذا ليس غريباً على وجه الخصوص وقد حدث في كل مكان في وقتٍ أو آخر حيث تم تغيير أو تغيير المناطق الزمنية بسبب الإجراءات السياسية أو الإدارية.







java list set