java - فئة جافا التي تطبق الخريطة وتحافظ على ترتيب الإدراج؟




dictionary key-value (6)

أقترح LinkedHashMap أو TreeMap . يحتفظ LinkedHashMap بالمفاتيح بالترتيب الذي تم إدراجه فيه ، بينما يتم الاحتفاظ بـ TreeMap خلال Comparator أو الترتيب Comparator الطبيعي للعناصر.

نظرًا لأنه لا يلزم إبقاء العناصر مرتبة ، يجب أن يكون LinkedHashMap أسرع في معظم الحالات ؛ يحتوي TreeMap على TreeMap O(log n) لـ containsKey ، get ، put ، remove ، وفقًا لـ Javadocs ، بينما LinkedHashMap هو O(1) لكل منها.

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

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

  1. أضف القيم إلى Hashtable .
  2. الحصول على مكرر لـ Hashtable.entrySet() .
  3. تكرار كل القيم و:
    1. الحصول على Map.Entry .
    2. إنشاء كائن من نوع Module (فئة مخصصة) استناداً إلى القيمة.
    3. أضف الصف إلى JPanel.
  4. أظهر اللوحة.

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

وأود أن استخدام ArrayList أو Vector لهذا ، ولكن في وقت لاحق في رمز أحتاج إلى الاستيلاء على كائن Module لمفتاح معين ، والتي لا أستطيع القيام به مع ArrayList أو Vector .

هل يعرف أي شخص وجود فصل Java مجاني / مفتوح المصدر يقوم بذلك ، أو طريقة للحصول على قيم خارج Hashtable بناءً على وقت إضافتها؟

شكر!


سيقوم LinkedHashMap بإرجاع العناصر بالترتيب الذي تم إدراجه في الخريطة عندما تقوم بتكرار فوق keySet () أو entrySet () أو قيم () للخريطة.

Map<String, String> map = new LinkedHashMap<String, String>();

map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

سيقوم هذا بطباعة العناصر بالترتيب الذي تم وضعه في الخريطة:

id = 1
name = rohan 
age = 26 

لا أعرف ما إذا كانت مفتوحة المصدر ، ولكن بعد القليل من googling ، وجدت تطبيق Map باستخدام ArrayList . يبدو أن ما قبل 1.5 جافا ، لذلك قد ترغب في تنميتها ، والتي يجب أن تكون سهلة. لاحظ أن هذا التنفيذ لديه وصول O (N) ، ولكن هذا لا يجب أن يكون مشكلة إذا لم تقم بإضافة مئات من الأدوات إلى JPanel الخاص بك ، والذي لا ينبغي عليك بأي حال.


يمكنك استخدام LinkedHashMap لترتيب الإدراج الرئيسي في الخريطة

النقاط المهمة حول فئة Java LinkedHashMap هي:

  1. يحتوي على عناصر onlyunique.
  2. يحتوي LinkedHashMap على قيم تستند إلى المفتاح 3. قد يكون لديك مفتاح فارغة واحد وقيم فارغة متعددة. 4.It هو نفس HashMap بدلا يحافظ على ترتيب الإدراج

الطبقة العامة LinkedHashMap يمتد تطبيق HashMap الخريطة

ولكن إذا كنت تريد قيم الفرز في الخريطة باستخدام كائن معرّف من قبل المستخدم أو أي مفتاح نوع بيانات بدائي فعليك استخدام TreeMap لمزيد من المعلومات ، راجع هذا الارتباط EXplaination



إذا كانت الخريطة غير قابلة للتغيير تتناسب مع احتياجاتك ، فهناك مكتبة بها google تدعى guava ( guava (انظر أيضًا أسئلة جوافة )

يوفر guava ImmutableMap مع أمر التكرار المحدد من قبل المستخدم الموثوق. هذا ImmutableMap ديه O (1) أداء مفتاح ، الحصول على. من الواضح أن وضع وإزالة غير معتمدة.

يتم إنشاء كائنات ImmutableMap باستخدام أساليب الراحة static أنيقة of() و copyOf() أو كائن Builder .





key-value