[java] مجموعة جافا الإبقاء على النظام؟


5 Answers

LinkedHashSet هو ما تحتاجه.

Question

هل هناك مجموعة جافا تحتفظ بالطلب؟ تقوم إحدى الطريقتين بإرجاع مجموعة معي ومن المفترض أن يتم ترتيب البيانات ولكن مع تكرارها على المجموعة ، فإن البيانات غير مرتبة. هل هناك طريقة أفضل لإدارة هذا؟ هل يجب تغيير الطريقة لإرجاع شيء آخر غير المجموعة؟




فقط SortedSet يمكن أن تفعل ترتيب Set







في ما يلي ملخص سريع لخصائص ترتيب تطبيقات Set القياسية المتوفرة في جافا:

  1. الحفاظ على ترتيب الإدراج: LinkedHashSet و CopyOnWriteArraySet (مؤشر ترابط آمن)
  2. إبقاء العناصر مرتبة داخل المجموعة: TreeSet و EnumSet (خاص بـ enums) و ConcurrentSkipListSet (مؤشر ترابط آمن)
  3. لا تحتفظ بالعناصر بأي ترتيب محدد: HashSet (الشخص الذي جربته)

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




المجموعة هي مجرد واجهة. لكي تحتفظ بالطلب ، يجب عليك استخدام تنفيذ محدد لتلك الواجهة والواجهة الفرعية SortedSet ، على سبيل المثال TreeSet أو LinkedHashSet. يمكنك لف الخاص بك تعيين بهذه الطريقة:

Set myOrderedSet = new LinkedHashSet(mySet);



من javadoc لـ Set.iterator() :

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

وكما هو مذكور بالفعل من قبل shuuchan ، فإن TreeSet هو تطبيق لـ Set يحتوي على أمر مضمون:

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




Related



Tags

java java   set   order