Оқыңыз HashMap <String, HashMap <Double, Integer>

HashMap бар:

HashMap aircraftHandling = new HashMap>();

Бұл HashMap келесі жазбаларды қамтиды:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

I need to get entries for the key "M", i.e. HashMap<1.22, 200> and HashMap<5.62, 300>. I do this in the following way:

HashMap lines = (HashMap) aircraftHandling.get("M");

Сұрақ: Double және Integer , яғни (1.22, 200) және (5.62, 300) екі бөлек айнымалы мәнге қалай жетуге болады?

for (int i=0; i
3
@GMZ Менің ойымша, бұл жазбалар «M» кілтінің астында сақталған картада.
қосылды автор Pshemo, көзі
@GMZ Сіз дұрыс боласыз, бірақ ОС-ның pastebin.com/mb53kYLx сияқты бір нәрсені пайдалану мүмкіндігі аз бірақ ол оның сұрағына дұрыс жауап бермеді. Қалай болса да, бір кілт бойынша бір ғана құндылық болуы мүмкін.
қосылды автор Pshemo, көзі
Сіз жіберген код сіздің ішкі картаңыз кілт/мән жұбының орнына өз класы арқылы жақсы көрсетілетінін білдіреді
қосылды автор Mataniko, көзі
Бірдей кілтпен екі жазба болмайды. Біріншісі жазылады.
қосылды автор GMZ, көзі
Бұл мысалда aircraftHandling деп аталған бір HashMap және үш жазба тек 2 жазба болады, себебі бірінші (HashMap <�«M», HashMap <1.22, 200 >> ();) екінші (HashMap <�«M», HashMap <5.62, 300 >> ();). Бұл сұрақты түсіндім.
қосылды автор GMZ, көзі

7 жауаптар

Элементтерді оқу үшін тек жақсартылған циклды пайдалануға болады:

for (Map.Entry entry : lines.entrySet()) {
   Double key = entry.getKey();
   Integer value = entry.getValue();
}

Бұл HashMap келесі жазбаларды қамтиды:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

I need to get entries for the key "M", i.e. HashMap<1.22, 200> and HashMap<5.62, 300>. I do this in the following way:

Not considering the syntax used , since the key is a String , the second time you try to put() a value in the Map using a String key which already exists in Map the new value will override the old value.

3
қосылды

foreach айналымы және әдісі HashMap.entrySet() :

HashMap map=...
for(Entry entry : map.entrySet()){
   Double d = entry.getKey();
   Integer i = entry.getValue();
}
2
қосылды

Мүмкін, осылай көріңіз

Map lines = (HashMap) aircraftHandling.get("M");
// ^add this generic types here so you wont have to cast them later with getters
for (Map.Entry entry:lines.entrySet()){
    Double key = entry.getKey();
    Integer value = entry.getValue();
}
2
қосылды

Біріншіден, Карта копирайттың кілті болмайды. Егер сіз қайталанатын кілт енгізсеңіз, онда алдыңғы жоғалады. Кілтті және мәнді бөлу үшін келесі кодты қолдануға болады:

     HashMap lines = (HashMap) aircraftHandling.get("M");

     for(Map.Entry entry: lines ){

        doubleValue = entry.getKey();
        integerValue =entry.getValue();
     }
2
қосылды

пернелер тіркесімі арқылы қайту арқылы HashMap кілт-мәнінің жұпын шығарып алуыңыз:

Iterator it= lines.keySet().iterator();
while (it.hasNext()) {
    Double key= it.next();
    Integer value= lines.get(key);
}

Бүйірлік нотада, бұл қате немесе сіздің деректеріңіздің нашар көрінісі екенін білмеймін:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();

Бірақ егер бұл көрінсе, бұл мүмкін емес. Map бір кілт үшін бір мәнді болуы мүмкін! Бұл дегеніміз, егер сіз кодты «M» мәніне енгізсеңіз және сол кілт үшін қайтадан жасасаңыз, онда ол алдыңғы мәнді қайта жазады. Сіз не істеуіңіз керек:

//get the inner map for "M"
HashMap innerMap= aircraftHandling.get("M");
if (innerMap == null) {
    //if it does not exist instantiate it
    innerMap= new HashMap();
    aircraftHandling.put("M", innerMap);
}

енді innerMap ішіне басқа мәндерді қосасыз, мысалы:

innerMap.put(1.22, 200);
innerMap.put(5.62, 300);    
2
қосылды

Мұнда сізде:

HashMap> aircraftHandling = new HashMap>();

HashMap subMap1 = new HashMap();
subMap1.put(1.22, 200);

HashMap subMap2 = new HashMap();
subMap1.put(5.62, 300);

aircraftHandling.put("M", subMap1);
aircraftHandling.put("L", subMap2);

HashMap lines = aircraftHandling.get("M");

for (Entry set : lines.entrySet()) {
    Double doubleValue = set.getKey();
    Integer integerValue = set.getValue();
}
2
қосылды

Сізге 2 мағынаға ие болуыңыз мүмкін. Маңызды қою кезінде бұл туралы қамқорлық жасадыңыз деп үміттенемін. Сізге М мәніне арналған бір хэшмэт жасаңыз.

Сіз тек M кілтіне сәйкес келетін хэшм картасын алуыңыз керек

HashMap lines = (HashMap) aircraftHandling.get("M");

Содан кейін осы картаға енгізілген барлық жазбаларды қайталаңыз

Iterator it = lines.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    double d = pairs.getKey().doubleValue();
    int i = pairs.getValue().intValue();
}

EDIT - Ұялы телефонымнан жауап берді, сондықтан бірнеше бөлшектерді жіберіп алды. Оларды қазір қосу.

1
қосылды