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




dictionary key-value (8)

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

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

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

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

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

شكر!


Answers

يمكنك محاولة تنفيذ " خريطة شجرة مرتبطة" الخاصة بي.


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

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

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

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

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


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


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

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

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


يمكنك الاحتفاظ Map (للبحث السريع) List (للطلب) ولكن قد يكون LinkedHashMap هو الأبسط. يمكنك أيضًا تجربة SortedMap مثل TreeMap ، والتي تحتوي على أي ترتيب تحدده.


كلما احتجت إلى الحفاظ على النظام الطبيعي للأشياء المعروفة في وقت مبكر ، يمكنني استخدام EnumMap

سوف تكون المفاتيح التعداد ويمكنك إدراج بأي ترتيب تريد ولكن عندما تتكرر فإنه سيتم التكرار في التعداد (الترتيب الطبيعي).

أيضا عند استخدام EnumMap يجب أن يكون هناك أي تصادم التي يمكن أن تكون أكثر كفاءة.

أجد حقا أن استخدام enumMap يجعل لتنظيف التعليمات البرمجية القابلة للقراءة. هنا example


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

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

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


When we declare static member class inside a class, it is known as top level nested class or a static nested class. It can be demonstrated as below :

class Test{
    private static int x = 1;
        static class A{
        private static int y = 2;
        public static int getZ(){
            return B.z+x;
        }
    }
    static class B{
        private static int z = 3;
        public static int getY(){
            return A.y;
        }
    }
}

class TestDemo{
     public static void main(String[] args){
        Test t = new Test();
        System.out.println(Test.A.getZ());
        System.out.println(Test.B.getY());
    }
}

When we declare non-static member class inside a class it is known as inner class. Inner class can be demonstrated as below :

    class Test{
        private int i = 10;
        class A{
            private int i =20;
            void display(){
            int i = 30;
            System.out.println(i);
            System.out.println(this.i);
            System.out.println(Test.this.i);
        }
    }
}




java dictionary key-value