Я сейчас программирую симуляцию лифта. Поэтому мне нужно было создать ListMultiMap «passengerFloorMap» для хранения следующих значений:
- идентификатор пассажира
- startFloor пассажира
- destinationFloor пассажира
Теперь мне нужно было перемешать ключи «passengerFloorMap». Это нужно было сделать, чтобы создать случайный порядок прибытия пассажиров. Например: сначала была «passengerFloorMap» {1 = [2,4], 1 = [3,4], 1 = [1,0], ...}
Затем были просто перемешаны ключи , потому что я хотел выбрать связанные значения позже:
`private List<Integer> shuffleKeyList(){
keySet = new ArrayList<>(passengerFloorMap.keySet());
Collections.shuffle(keySet);
return keySet;
}
` Return example: [12, 130, 15, ...]
После этого я создал другую функцию для создания нового MultiMapList "randomOrder". Там новый порядок ключей ([12, 130, 15, ...]) должен быть сохранен. Также я хотел получить связанные значения для этих ключей из «passangerFloorMap». Таким образом, результат должен выглядеть следующим образом: randomOrder = {12 = [3,1], 130 = [0,4], 15 = [2,1], ...}. Чтобы это произошло, я сохранил перемешанный список в ArrayList:
List<Integer> shuffledList = new ArrayList<>();
private List<Integer> shuffleKeyList(){
List<Integer> keySet = new ArrayList<>(passengerFloorMap.keySet());
Collections.shuffle(keySet);
return keySet;
}
private void pickRandomPassanger(){
ListMultimap<Integer, Integer> randomOrder = ArrayListMultimap.create();
ArrayList<Integer> list = new ArrayList<>();
shuffledList = shuffleKeyList();
for (int i = 0; i < shuffledList.size(); i++){
liste.add(shuffledList.get(i));
}
}
Теперь я хочу заполнить «randomOrder» ключами (в новом порядке после перемешивания) и связанными значениями. Для этого я создал for-l oop (в pickRandomPassenger): 3 - просто пример, будет заменен на правильное значение
for(int j = 0; j < liste.size(); j++){
randomOrder.put(liste.get(j), 3);
}
Так что теперь проблема приходит. Если я вызываю randomOrder.put (liste.get (j), x), он получает значение, отличное от вызова randomOrder.put (liste.get (0), x). Также, если j = 0. Вот мой вывод:
keySet = [46, 39, 81, 38, 34, 87, 20, 71, 32,...]
list = [46, 39, 81, 38, 34, 87, 20, 71, 32,...]
randomOrder = {1=[3], 2=[3], 3=[3], 4=[3], 5=[3], 6=[3], 7=[3], 8=[3], 9=[3], ...]
Но, если я позвоню
randomOrder.put(list.get(0), 3)
, он получит:
randomOrder = {46=[3]}
Я обнаружил, что проблема должна быть вызвана ссылкой на память. Но я не знаю, как решить эту проблему. Надеюсь, кто-то из вас сможет помочь.