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

标签 java data-structures

我想访问 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/

相关文章:

python - 如何从键/初始计数对列表中初始化计数器?

data-structures - 二叉树顶 View 的歧义

java - 图像在横向模式下被拉伸(stretch)

Java 数据结构与 Redis

java - 在 IE 中使用 Style 检查元素是否存在的语法是什么

java - 将两个存在于 hive 中的 spark 表连接起来

arrays - 为什么在线性搜索Java程序中使用空字符串

algorithm - 给定神奇数据结构的更快排序算法?

java - Document or Text Clustering using EM algorithm for GMM, 怎么办?

java - 不执行SQL时Spring事务回滚