رسم خرائط ثنائية الاتجاه باستخدام بنية بيانات واحدة

StackOverflow https://stackoverflow.com/questions/860727

  •  21-08-2019
  •  | 
  •  

سؤال

لقد صادفت مؤخرًا بعض الأكواد البرمجية في العمل (أعيد إنشاؤها لتكون مشابهة لما أتعامل معه) على غرار الكود أدناه

هل هناك طريقة يمكنني من خلالها إعادة صياغة الكود أدناه لاستخدام بنية بيانات واحدة (مع أخذ الأداء في الاعتبار)؟

إليك بعض التعليمات البرمجية لتوضيح ما أعنيه:

public class ObjectMapper {

    private Map<UUID,Integer> uuidMap;
    private Map<Integer,UUID> indexMap;

    public ObjectMapper(){
        uuidMap = new HashMap<UUID,Integer>();
        indexMap = new HashMap<Integer,UUID>();
    }

    public void addMapping(int index, UUID uuid){
        uuidMap.put(uuid, index);
        indexMap.put(index, uuid);
    }


    .
    .
    .

    public Integer getIndexByUUID(UUID uuid){
        return uuidMap.get(uuid);
    }

    public UUID getUUIDByIndex(Integer index){
        return indexMap.get(index);
    }


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

المحلول

يتم الرد هنا مع توصية لاستخدام BiMap من مجموعات جوجل

نصائح أخرى

مجموعات أباتشي تدعم أ خريطة بيدي واجهة ومجموعة متنوعة من التطبيقات الفعالة إلى حد ما.

هل يمكن استخدام Map<Object,Object> واحدة أن تفعل كل من تعيينات. قبيح، بالتأكيد. وينبغي أن يكون الأداء تقريبا نفس، أو أفضل قليلا في حال من غير المحتمل أن يكون لديك العديد ObjectMappers مع بعض القيم المعينة.

يمكنك استخدام خريطة بيماب من مجموعات الكسوف.

BiMap هي خريطة تسمح للمستخدمين بإجراء عمليات البحث من كلا الاتجاهين.كل من المفاتيح والقيم الموجودة في BiMap فريدة من نوعها.

التنفيذ الرئيسي هو HashBiMap.

inverse()

BiMap.inverse() تقوم بإرجاع طريقة عرض حيث يتم تبديل موضع نوع المفتاح ونوع القيمة.

MutableBiMap<Integer, String> biMap =
  HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3");
MutableBiMap<String, Integer> inverse = biMap.inverse();
Assert.assertEquals("1", biMap.get(1));
Assert.assertEquals(1, inverse.get("1"));
Assert.assertTrue(inverse.containsKey("3"));
Assert.assertEquals(2, inverse.put("2", 4));

put()

MutableBiMap.put() يتصرف مثل Map.put() على خريطة عادية، إلا أنه يتم طرحه عند إضافة قيمة مكررة.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.put(1, "1"); // behaves like a regular put()
biMap.put(1, "1"); // no effect
biMap.put(2, "1"); // throws IllegalArgumentException

forcePut()

هذا يتصرف مثل MutableBiMap.put(), ، ولكنه يزيل إدخال الخريطة بنفس القيمة بصمت قبل وضع زوج القيمة الرئيسية في الخريطة.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.forcePut(1, "1"); // behaves like a regular put()
biMap.forcePut(1, "1"); // no effect
biMap.forcePut(1, "2"); // replaces the [1,"1"] pair with [1, "2"]
biMap.put(2, "2"); // removes the [1, "2"] pair before putting
Assert.assertFalse(biMap.containsKey(1));
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "1"), biMap);

ملحوظة: أنا ملتزم بمجموعات Eclipse.

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