سؤال

كنت أتساءل إذا كان هناك فئة من هناك أن تنفذ كل Map و List واجهات في جاوة.

لدي بنية البيانات التي هو في المقام الأول Map.انا خريطة السلاسل (IDs) إلى Images.ولكن في جزء معين من التعليمات البرمجية, أنا بحاجة إلى تقديم المستخدم مع كل المتوفرة تخص Images.الطريقة الوحيدة للقيام بذلك حتى الآن هو أن يكتب هذا:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

لذلك سيكون من الجميل أن يكون الفئة التي تطبق على حد سواء Map و List لذا يمكن ببساطة كتابة:

for (Image img : myMap) {
  // the image is img
}

لا أحد يعرف من هذا التنفيذ ؟

تحرير:بعد عرض الإجابات (التي هي كلها صحيحة ، صوت) ، وأنا أدرك الآن أنني سوف تحتاج أيضا الخريطة ليتم فرزها.عندما أقول "فرز" ، كل ما أعنيه هو أن كنت أود أن يكون القيم في ترتيب معين, واحد التي أود أن تكون قادرة على تعديل.أعرف أن هذا ليس هو السؤال الأصلي, ولكن أنا فقط أدركت أنني بحاجة إلى ذلك.

تحرير 2:يبدو أنني غير حاسم.ما أحتاجه هو أمر خريطة ليس على مرتبة واحدة.آسف على اللخبطة الناس.

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

المحلول

إذا كنت بحاجة الى البنود الخاصة بك في ترتيب معين، LinkedHashMap هو صديقك - فإنه يحتفظ العناصر في أمر والإدراج. سوف TreeMap إبقاء البنود الخاصة بك في أمر يحدد إما على المقارنة التي تعطيها أو أسلوب compareTo من المفتاح.

نصائح أخرى

عن أمر خريطة نظرة على LinkedHashMap.التي من شأنها الحفاظ على المفاتيح الخاصة بك في ترتيب الإدراج.

إذا كنت تستخدم SortedMap أنها سوف تبقي المفاتيح في ترتيب فرزها.(إن TreeMap هو الأكثر شيوعا التنفيذ.)

ماذا يمكنك استخدام map.entrySet().من شأنها أن تسمح لك أن تكرار عبر مجموعة من MapEntries.

تحقق من جافادوك قليلا مزيد من المعلومات.

وكنت قد حصلت بالفعل على مجموعة من الأجوبة العملية. ولكن الإجابة مباشرة على السؤال ...

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

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

و... انها الجدير بالذكر أنه من المستحيل ببساطة. طريقة remove(Object) هو العائق.

في واجهة Map التوقيع عليه هو:

V remove(Object key);

وفي واجهة List انها:

boolean remove(Object o);

ويمكنك استخدام Map.values() طريقة ، التي ترجع Collection.

وهذا يعطي لكم مجموعة من القيم المخزنة

myMap.values()

جرب هذا:

for (Image img : myMap.values()) {
    // the image is img
}

من أجل فرز خريطة ننظر java.util.SortedMap تطبيقات. java.util.TreeMap هو في معظم الأحيان الاختيار.إذا كنت بحاجة فقط مضمونة التكرار النظام يمكنك محاولة java.util.LinkedHashMap.ويوفر التكرار في نفس الترتيب كما يمكنك وضع عناصر الخريطة.أو اختياريا ، في الماضي-الوصول إلى النظام.إذا كنت ترغب في تحريك مفتاح (مرة واحدة المضافة) إلى نهاية الخريطة ، يجب صراحة إزالة ووضعها مرة أخرى.

ويمكنك استخدام TreeMap يتم فرز وفقا لترتيب الطبيعي للمفاتيحها، أو عن طريق المقارنة المقدمة في وقت إنشاء خريطة:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

وحيث ByNameComparator () هو المقارنة. بدلا من ذلك يمكنك استخدام القيم () methond والفرز باستخدام Collections.sort ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top