Значения HashMap становятся недействительными? - PullRequest
1 голос
/ 20 апреля 2011

Итак, я написал эту функцию, которая получает список пользователей и их местоположения (это приложение для мобильного телефона), она вставляет правильные значения в hashmap (ret.put (...)), но как только функция возвращается, все значения на карте были установлены на неправильный идентификатор пользователя 0 и расположение 0,0. Мне кажется, что Java удаляет fmsg, который затем удаляет UserID и Location, которые я поместил на карту. Что вы, ребята, думаете?

public HashMap<UserID, Location> getFriendsLocations(ArrayList<UserID> friends) {
        MessageHdr hdr = new MessageHdr(sock);
        hdr.len = 2;
        hdr.id = MessageID.FRIENDS.id;
            //Transmit the list of users' we are interested in
        for(UserID u : friends) {
            if(!hdr.send() || !u.send())
                return null;            
        }
            //Now, start receiving responses from the server.
        HashMap<UserID, Location> ret = new HashMap<UserID, Location>();
        FriendsMsg fmsg = new FriendsMsg(sock);
        for(int i = 0; i < friends.size(); i++) {
            if(fmsg.recv())
                ret.put(fmsg.uid, fmsg.loc);
        }   
        return ret;
    }

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Вероятно, ваш UserID является изменяемым и изменяется таким образом, что его хэш-код изменяется и / или соответствует поведению. Таким образом, вы взорвете HashMap полностью.

1 голос
/ 20 апреля 2011

Не вините в этом Java. То, что вы показываете здесь, не говорит о том, что структура или использование UserID или Location. fmsg.recv (), вероятно, повторно использует структура, которая представляет их (так же, как вы повторно используете структуру FriendsMsg)

0 голосов
/ 20 апреля 2011

Очень сложно сказать, что не так с вашим кодом, потому что фрагмент кода, который вы дали, является неполным.У нас мало информации о вашей структуре данных (FriendMsg, друзья ArrayList и т. Д.) И данных, полученных с сервера.Просто чтобы сказать вам, ошибка не придет Java или HashMap.Вы должны убедиться, что вы получаете правильные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...