Map.put(list.get(0))返回的值与Map.put(list.get(i))

问题描述 投票:0回答:1

我目前正在编写电梯的仿真程序。因此,我需要创建一个ListMultiMap“ passengerFloorMap”来存储以下值:

  • 乘客ID
  • 乘客的起始楼层
  • 目的地乘客层

现在,我需要重新整理“ 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循环(在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]}

我发现问题应该由内存引用引起。但是我不知道如何解决这个问题。希望你们中的某人可以提供帮助。

我目前正在编写电梯的仿真程序。因此,我需要创建一个ListMultiMap“ passengerFloorMap”来存储以下值:乘客startid的ID乘客destinationFloor的...

java list multimap
1个回答
0
投票

我想您想说的是,您希望第一个元素为46 = [3],而不是1 = [3]?

© www.soinside.com 2019 - 2024. All rights reserved.