gpt4 book ai didi

java - 我将如何管理 HashMap 中的队列?

转载 作者:行者123 更新时间:2023-12-01 16:54:55 24 4
gpt4 key购买 nike

我想访问 PetQueue 并使用宠物的 ID 号将 Pet 对象(不仅仅是 ID 号)添加到可用的最短队列中。我不确定是否要管理队列,找到最短的队列。每当我运行它时,它总是将宠物添加到同一个队列中,无论大小如何。

   static void admitPatient(Map<Integer, Pet> readPets, HashMap<String, PetQueue> vetMap) {
if (vetMap.isEmpty()) {
System.out.println("No vets are currently checked in.");
} else {
System.out.print("Enter the pet's id number: ");
int petID = Integer.parseInt(keyb.nextLine());
Pet p1 = readPets.get(petID);
if (p1 != null) {
PetQueue shortestQueue = null;
Map.Entry<String, PetQueue> entry = vetMap.entrySet().iterator().next();
//System.out.println(entry);
int size = entry.getValue().size() +1;
String drName = "";
System.out.println("size" + size);
for (Map.Entry<String, PetQueue> vetsAndQueue : vetMap.entrySet()) {
// System.out.println(vetsAndQueue.getValue());
// PetQueue vetsAndQSize = vetsAndQueue.getValue();
if (vetsAndQueue.getValue().size() <= size){
shortestQueue = vetsAndQueue.getValue();
shortestQueue.enqueue(p1);
drName = vetsAndQueue.getKey();
}
}
vetMap.put(drName,shortestQueue);

System.out.printf("%s will see Dr. %s\n", p1, drName);
}else{
System.out.printf("No pet found with ID %d\n", petID);
}
}
}
}

最佳答案

用于查找短路队列的逻辑不清楚。

首先,将搜索限制设置为 int size = entry.getValue().size() +1;这是迭代器中第一个元素的大小加一。

然后你使用 if (vetsAndQueue.getValue().size() <= size)找到最短的队列。大多数时候,它只会遇到迭代器中相同的第一个元素,并且只会遇到 if block ,并且 pet 将直接入队。这就是为什么你最终会让宠物总是在同一个队列中。

size的定义变量没有意义,因为您无法保证 vetMap 中的第一个队列的大小最小。

正如其他人的回答一样,您只需要等待,直到找到真正最短的队列来满足您的宠物元素。它可能看起来像这样:

static void admitPatient(Map<Integer, Pet> readPets, HashMap<String, PetQueue> vetMap) {
if (vetMap.isEmpty()) {
System.out.println("No vets are currently checked in.");
} else {
System.out.print("Enter the pet's id number: ");
int petID = Integer.parseInt(keyb.nextLine());
Pet p1 = readPets.get(petID);
if (p1 != null) {
Map.Entry<String, PetQueue> shortestQueueVet = null;
Map.Entry<String, PetQueue> entry = vetMap.entrySet().iterator().next();
//System.out.println(entry);
int size = entry.getValue().size();
String drName = "";
System.out.println("size" + size);
for (Map.Entry<String, PetQueue> vetsAndQueue : vetMap.entrySet()) {
if (vetsAndQueue.getValue().size() < size){// here keep finding shortest queue
size = vetsAndQueue.getValue().size();
shortestQueueVet = vetsAndQueue;
}
}
shortestQueueVet.getValue().enqueue(p1);
drName = shortestQueueVet.getKey();
//vetMap.put(drName, shortestQueue); ##you don't need to re-put the element since the key remains unchanged

System.out.printf("%s will see Dr. %s\n", p1, drName);
}else{
System.out.printf("No pet found with ID %d\n", petID);
}
}
}
}

关于java - 我将如何管理 HashMap 中的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61605913/

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