Hashmap - odwroacanie wartosci

0

Witam wszystkich forumowiczów. W końcu nadszedł dzień, w ktorm postanowiłem poprosić o pomoc w zadanku. Problem wydawał mi się prosty, jednak nie potrafie wymyślec algorytmu...

Sytuacja przedstawia się tak: mam HashMap<Int1, Int2> tworze nową mapę i chcę aby w niej wartosci i klucze były odwrotne niż w bazowej hashmapie. Czyl HashMap<Int2, Int1>.
Oto cały mój kod, łącznie z komentarzami bo cały czas testuje....Macie może jakiś pomysł jak rozwiązać powyższe zagadnienie ?

 package TestKolokwium_1;
import java.util.*;
//import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
public class Test {

    public static void main(String[] args) {

//Napisz program, który z kolekcji HashMap<Integer,Integer> stworzy nową mapę, gdzie klucze i wartości są zamienione miejscami.
        
        Map <Integer,Integer> hashmap = new HashMap<Integer, Integer>();
        
        hashmap.put(1,201);
        hashmap.put(2,202);
        hashmap.put(3,203);
        hashmap.put(4,204);
        hashmap.put(5,205);
        hashmap.put(6,206);
        hashmap.put(7,207);
        hashmap.put(8,208);
        hashmap.put(9,209);
        
        System.out.println(hashmap);
        
        Set<Integer> klucze = hashmap.keySet();
        System.out.println(klucze);
        
        Collection<Integer> wartosci = hashmap.values();
        System.out.println(wartosci);
       
        //////// mapa K-kolekcja i V-set == duzy 1 klucz i duza 1 wartosc//////////////
//        Map <Collection, Set> hashmap2 = new HashMap<Collection, Set>();
//        hashmap2.put(wartosci,klucze);
        
        Map<Integer,Integer> hashmap2 = new HashMap<Integer,Integer>();
        
        for(int j = 0 ; j < klucze.size() ; j++ ) {
            for(int i = 0 ; i < wartosci.size() ; i++ ){
                if(i==j){
                    hashmap2.put( klucze.add(j), wartosci.get(i) );
                }
            }
        }
        System.out.println(hashmap2);
    }
}
0
Map<Integer,Integer> source;
Map<Integer,Integer> destination;
for(Entry<Integer,Integer> sourceEntry : source.entrySet()){
  destination.put(sourceEntry.getValue(),sourceEntry.getKey());
}
0

Hmmm. Czy dobrze rozumuje ?
pobieram pary z source i wstawiam do destination klucz i wartosc z source ? Brzmi idealnie :-)

A mógłbyś powiedzieć czym jest ten Entry<Int,Int> ? sama metoda entrySet() wiem, że pobiera pary z mapy

0

Entry<K,V> to jest klasa która przechowuje parę klucz-wartość w mapie, to chyba dość oczywiste.

0

Z ciekawości, co ma zawierać "odwrócona" mapa w takim przypadku:

Map <Integer,Integer> hashmap = new HashMap<Integer, Integer>();
 
hashmap.put(1,5);
hashmap.put(2,5);
0

Zależy, co specyfikuje polecenie. Nie da się zrobić wpisów (5,1) oraz (5,2), bo temu samemu kluczowi przyporządkowałbyś dwie wartości, a to jest sprzeczne z podstawowymi zasadami map. Jeśli wrzucisz do mapy (5,1), a później (5,2), to zostanie tam (5,2) - temu samemu kluczowi przypisujesz nową wartość.

0

@kaskader_kl jasne, ale problem ten można rozwiązać stosując mapę w której wartości są osobną kolekcją, albo korzystając z jakiejś multimapy, wszystko zależy tak jak piszesz od zadania.

0

@airborn, w pierwszym poście jest wymóg, że odwrócona mapa jest typu HashMap<Integer,Integer>, zatem ani multimapy, ani mapy typu HashMap<Integer,Set<Integer>> nie przejdą. Ja chciałem tylko zwrócić uwagę, że przy tak sformułowanym zadaniu, rozwiązanie nie istnieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1