Hashmap - odwroacanie wartosci

Odpowiedz Nowy wątek
2013-03-31 17:39
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);
    }
}

Pozostało 580 znaków

2013-03-31 18:11
0
Map<Integer,Integer> source;
Map<Integer,Integer> destination;
for(Entry<Integer,Integer> sourceEntry : source.entrySet()){
  destination.put(sourceEntry.getValue(),sourceEntry.getKey());
}

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-03-31 18:36
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

Pozostało 580 znaków

2013-03-31 19:02
0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-03-31 21:23
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);

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

Pozostało 580 znaków

2013-04-02 07:38
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ść.

Pozostało 580 znaków

2013-04-02 07:57
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, 2013-04-02 07:59

Pozostało 580 znaków

2013-04-02 08:08
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, 2013-04-02 08:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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