Skip to content
Advertisement

HashMap element is removed when another HashMap name remove an element

appearList is a HashMap with fixed data. I do:

randomPersonList = appearList;

Then, when I remove an element from randomPersonList, that element on appearList is also removed unexpectedly. I expect to keep appearList as original.

Can anyone tell me why and how to correct my code?

package personaltries;

import java.util.*;

public class issue {
    public static void main(String[] args) {
        HashMap<Integer, String> appearList = new HashMap<>();
        appearList.put(1,"a");
        appearList.put(2,"b");
        HashMap<Integer, String> randomPersonList = appearList;
        Scanner scanner = new Scanner(System.in);
        boolean keepPlaying = true;
        while (keepPlaying) {
            System.out.println("1. Pick randomly a person");
            int chosenOption = scanner.nextInt();
            if (chosenOption == 1) {
                pickRandomlyAPerson(randomPersonList, appearList);
            } else {
                System.out.println("Wrong option");
            }
        }

    }
    private static String pickRandomlyAPerson(HashMap<Integer, String> randomPersonList, HashMap<Integer, String> appearList) {
        if(randomPersonList.size()==0){
            randomPersonList=appearList;
        }
        List<Integer> listKey = new ArrayList<>(randomPersonList.keySet());
        int randomIndex = new Random().nextInt(listKey.size());
        int randomNumber = listKey.get(randomIndex);
        String name  = randomPersonList.get(randomNumber);
        randomPersonList.remove(randomNumber);
        System.out.println(name+" please!");
        System.out.println(randomPersonList);
        return (name);
    }
}

Advertisement

Answer

HashMap<Integer, String> randomPersonList = appearList;

makes randomPersonList the reference to the same object as appearList. So with both variables you are accessing the same object. Either create two HashMaps or create a clone.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement