gpt4 book ai didi

java - ListMultimap 不保留插入顺序

转载 作者:行者123 更新时间:2023-12-01 17:53:34 25 4
gpt4 key购买 nike

我目前正在编写电梯模拟程序。因此,我需要创建一个 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]}

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

最佳答案

我猜你想说的是你期望第一个元素是 46=[3],而不是 1=[3]?

你选错了类(class)。 ArrayListMultimap 仅保证保持键内元素的插入顺序,例如如果您插入 (46, 4) 后跟 (46, 3),您将得到 {46=[4, 3]}。但如果您使用不同的键插入,它会使用 HashMap 来确定该顺序。

如果你想保持键的插入顺序,你需要 LinkedListMultimap .

关于java - ListMultimap 不保留插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com