سؤال

ما هي أفضل طريقة لتنفيذ ثلاثة البند hashMap?على سبيل المثال, وأود أن استخدام منتظم السلسلة الرئيسية , ولكن لديك خريطة اثنين من كائنات مختلفة.فكرة مثل وجود قائمة من القوائم ، إلا أن البند الأول هو المفتاح.

أنا في محاولة لتجنب التكرار من خلال قائمة ( حتى السلوك مثل hashmap ).هل توافق السبيل الوحيد هو بناء جديد الصف ؟ يبدو "HashMap3" كائن ( مع أساليب get1( مفتاح ) & get2( مفتاح ) ) سيكون مفيدا.أنا غير متأكد من كيفية وضع هذا الأمر بنفسي.

كيف يمكنني إنشاء المجموعة ؟

هل كانت مفيدة؟

المحلول

إذا المفتاح سيتم تعيين دائما إلى <م> بالضبط كائنين، ثم أسهل طريقة للقيام بذلك هي لجعل فئة Pair موجود فقط لعقد الكائنين. ثم يمكنك استخدام سلسلة الخاص بك كمفتاح والمثال Pair كقيمة. ومع ذلك، إذا كان مفتاح يمكن تعيين لعدد عشوائي من كائنات، ثم IMO أفضل طريقة للقيام بذلك هو أن تكون القيمة المخزنة في Map تكون على Collection من نوع ما.

نصائح أخرى

ونظرة على جوجل-مجموعات Multimap

<اقتباس فقرة>   

ومجموعة مماثلة إلى الخريطة، ولكن   والتي قد ربط قيم متعددة   مع مفتاح واحد. إذا كنت استدعاء وضع (K،   V) مرتين، مع نفس المفتاح ولكن   قيم مختلفة، وmultimap   يحتوي على تعيينات من المفتاح لكلا   القيم.

أنا أتفق مع ايدي و كان مجرد مشكلة مماثلة مع العديد من القيم ، وليس اثنين.أردت جافا ConcurrentHashMap عقد ذاكرة التخزين المؤقت XML من الوثائق التي جلب من خدمة ويب ، أنا في حاجة لتسجيل قطع مختلفة من المعلومات جنبا إلى جنب مع XML إلى دعم ذاكرة التخزين المؤقت الإخلاء استراتيجيات (على سبيل المثال ، على الأقل المستخدمة مؤخرا, على الأقل استخداما).

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

private static class CacheEntry
{
    private String  uri;          // Key
    private String  fetched_xml;  // The XML document (main value)
    private long    put_time;
    private long    expires_time;
    private long    size;
    private long    hits;
    private long    last_used_time;
}

على ConcurrentHashMap كان مرتبطا على URI و يشبه هذا:

private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

هذه التعليمة البرمجية على إضافة مستند XML جديد إلى ذاكرة التخزين المؤقت:

CacheEntry value = new CacheEntry();
value.fetched_xml(fetched_xml); 
value.uri = uri;
value.put_time = System.currentTimeMillis();
value.expires_time = representation.getExpirationDate().getTime();
value.size = bytes_fetched;
value.hits = 0;
value.last_used_time = 0;
cache.put(uri, value);

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top