ثلاثة البند HashMap دون الداخلية التكرار
-
06-07-2019 - |
سؤال
ما هي أفضل طريقة لتنفيذ ثلاثة البند 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 مثل خريطة القيمة.