Hashmap - odwroacanie wartosci

Hashmap - odwroacanie wartosci
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
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 ?

Kopiuj
 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);
    }
}
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
Kopiuj
Map<Integer,Integer> source;
Map<Integer,Integer> destination;
for(Entry<Integer,Integer> sourceEntry : source.entrySet()){
  destination.put(sourceEntry.getValue(),sourceEntry.getKey());
}

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
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

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
KK
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:135
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ść.

airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
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.

edytowany 1x, ostatnio: airborn
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.