如何从 hashmap 中获取 5 个最高值?

2024-01-28

我有一个哈希映射,它链接存储为键的邮政编码和存储为哈希映射中的值的人口。

哈希映射包含大约 33k 条目。

我试图从 5 个邮政编码中获取 5 个最高人口值,并打印出与 5 个最高人口相关的 5 个邮政编码,但我无法理解如何做到这一点的算法。

如果只有 1 个,那很容易,但是 5 个限制给我带来了一些麻烦。

我知道将 5 个值存储在 int 数组中,并且我有一个计数器来确定何时存储其中 5 个值,但仅此而已。

Thanks

    int populatedCounter = 0;

    int[] populatedZip = new int[5];

    it = zipCodePop.entrySet().iterator();
    while (it.hasNext())
    {
        Map.Entry pairs = (Map.Entry)it.next();

        for (int i = 0; i < populatedZip.length; i++)
        {

        }
    }

}

将此类集合的条目放入列表中并对其进行排序是一种选择。但 33k 个元素是一个 O(n*log(n)) 排序复杂度可能已经对性能产生显着影响的数字。

一种方法是使用 nr4bt 已经提到的 PriorityQueue(我在他回答时写了这个片段)。它基本上将所有元素插入到根据映射条目的值排序的 PriorityQueue 中。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.PriorityQueue;

public class GreatestOfMap
{
    public static void main(String[] args)
    {
        Map<String, Integer> map = new HashMap<String, Integer>();

        map.put("zip000", 1234);
        map.put("zip001", 2345);
        map.put("zip002", 3456);
        map.put("zip003", 4567);
        map.put("zip004", 5678);
        map.put("zip005", 6789);
        map.put("zip006", 123);
        map.put("zip007", 234);
        map.put("zip008", 456);
        map.put("zip009", 567);
        map.put("zip010", 7890);
        map.put("zip011", 678);
        map.put("zip012", 789);
        map.put("zip013", 890);

        int n = 5;
        List<Entry<String, Integer>> greatest = findGreatest(map, 5);
        System.out.println("Top "+n+" entries:");
        for (Entry<String, Integer> entry : greatest)
        {
            System.out.println(entry);
        }
    }

    private static <K, V extends Comparable<? super V>> List<Entry<K, V>> 
        findGreatest(Map<K, V> map, int n)
    {
        Comparator<? super Entry<K, V>> comparator = 
            new Comparator<Entry<K, V>>()
        {
            @Override
            public int compare(Entry<K, V> e0, Entry<K, V> e1)
            {
                V v0 = e0.getValue();
                V v1 = e1.getValue();
                return v0.compareTo(v1);
            }
        };
        PriorityQueue<Entry<K, V>> highest = 
            new PriorityQueue<Entry<K,V>>(n, comparator);
        for (Entry<K, V> entry : map.entrySet())
        {
            highest.offer(entry);
            while (highest.size() > n)
            {
                highest.poll();
            }
        }

        List<Entry<K, V>> result = new ArrayList<Map.Entry<K,V>>();
        while (highest.size() > 0)
        {
            result.add(highest.poll());
        }
        return result;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 hashmap 中获取 5 个最高值? 的相关文章

  • 深入理解Java中的Volatile

    Java是否允许输出1 0 我已经对其进行了非常深入的测试 但无法获得该输出 我只得到1 1 or 0 0 or 0 1 public class Main private int x private volatile int g Exec
  • Mockito:使用“thenReturn”中的方法返回模拟不起作用

    我遇到了我认为可能是 Mockito 的错误 但想知道是否有其他人可以解释为什么这个测试不起作用 基本上 我有两个对象 如下所示 public class FirstObject private SecondObject secondObj
  • Android update 17 似乎与外部 Jars 不兼容

    我刚刚允许我的 Mac 对其 Java 安装进行更新 现在我的一些旧罐子 例如javax mail and apache commons httpclient 正在投掷 找不到类 运行时异常 意思是 它们编译得很好 但在运行时崩溃 出现如下
  • n 个素数之和 java,困惑

    我读过几篇关于这方面的文章 我什至在一次考试中这样做过 但是是在 vb net 中 它工作得很好 但是当我尝试执行我的程序时 Eclipse 只是不停地运行 否则它会给我错误的答案 这是我的第四次尝试 我需要将前 n 个素数相加 因此我检查
  • spring依赖注入会创建单例对象吗?

    spring内部是如何管理这些对象的呢 单例对象什么时候创建和销毁 默认情况下 Spring bean 基本上是单例的 Spring 将为每个类创建一个实例 并且通常会在 Spring 初始化时执行此操作 然而 这几乎是无限可定制的 Spr
  • 用零向左填充字符串[重复]

    这个问题在这里已经有答案了 我见过类似的问题here https stackoverflow com questions 388461 padding strings in java and here https stackoverflow
  • 在准备好的语句中使用“like”通配符

    我正在使用准备好的语句来执行 mysql 数据库查询 我想实现基于某种关键字的搜索功能 为此我需要使用LIKE关键字 我知道的就这么多 我以前也使用过准备好的语句 但我不知道如何使用它LIKE因为从下面的代码中我将在哪里添加 keyword
  • 从枚举返回计算值

    我的问题有两个而且很简单 按原样误解枚举 这个想法在我的代码中缺少一些重要的抽象 代码示例 其中oprt calc x y 无法编译 有警告cannot find symbol public enum Operation PLUS publ
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • 请求的操作:声明您的广告 ID 权限

    今天我收到这封电子邮件 去年 7 月 我们宣布了广告政策变更 以帮助加强 安全和隐私 我们对使用的标识符添加了新的限制 针对儿童的应用程序 当用户选择删除他们的 广告 ID 以选择退出个性化广告 如果满足以下条件 开发人员将收到一串零而不是
  • 信用卡号应该存储为字符串还是整数?

    是啊 只是想想而已 我应该将在我的网站上输入的信用卡号存储为字符串还是整数 我的意思是 它们由数字组成 这让我认为它是一个整数 但我不对它们进行数学运算 所以也许字符串更合适 编辑 所以我必须在加密之前存储在某个时刻输入的数字 我可能应该更
  • Java错误:线程“main”中出现异常java.lang.ArrayIndexOutOfBoundsException

    我是 Java 初学者 正在学习该课程算法 由普林斯顿大学提供 我按照书上的例子 二分查找在第 9 页 import edu princeton cs algs4 import java util Arrays public class B
  • java.util.Currency.getInstance 抛出 IllegalArgumentException

    我只是想尝试一下java util Currency 但对于少数货币代码来说它让我困惑java lang IllegalArgumentException 这是我的简单代码 java util Currency c java util Cu
  • Hibernate 过滤器仅在从数据库加载数据后应用吗?

    我在网上发现了一些相互矛盾的信息 有谁知道Hibernate过滤器是否影响生成的sql 或者只是过滤从数据库读取的数据 休眠过滤器影响 where 子句生成的 SQL The Hibernate 过滤器简介 http java dzone
  • SLF4J 日志级别作为参数[重复]

    这个问题在这里已经有答案了 我们希望使用 SLF4J 但我们发现的一件事是您无法将级别指定为参数 即 Logger log Level INFO messsage 你必须这样做 logger info message 这使得无法通过方法传递
  • Java 8 元空间垃圾收集

    我正在运行的 java 进程在运行的第一个小时左右始终表现良好 然而 性能会迅速下降 在分析时 我发现元空间垃圾收集相当频繁地发生 直到小时标记 然后失去控制 我相当确定我能够使用 XX MaxMetaspaceSize 选项来解决此问题
  • 如何在JavaFX中获得狭窄的进度条?

    正如标题所说 我需要制作一个细进度条 我用过这个 progressBar setMaxHeight 0 1 progressBar setPrefHeight 0 1 但这行不通 有人有想法吗 你必须搞乱样式才能让它变小 我真的建议看看ca
  • NoClassDefFound错误:org/apache/tools/ant/util/ReaderInputStream

    我在 Intellij 中有一个带有 gradle 的 java 项目 它直到几个小时前才工作 但在进行微小更改 或者我认为是这样 后突然出现错误 Error gradle resources test analyzer main java
  • 我可以在Java中设置枚举起始值吗?

    我使用枚举来创建一些常量 enum ids OPEN CLOSE OPEN 值为零 但我希望它为 100 这可能吗 Java 枚举与 C 或 C 枚举不同 后者实际上只是整数的标签 Java 枚举的实现更像是类 它们甚至可以有多个属性 pu
  • Java 8 哈希映射无法正常工作

    自 java 8 以来 我们面临着 HashMap 行为方式的奇怪问题 当HashMap的键实现了Comparable接口 但compareTo的实现与equals不一致时 HashMaps 长得比它们应该长的大得多 它们包含多个相同元素的

随机推荐

  • 使用不同单位类型进行测量的最佳方法

    Context 我正在编写一个应用程序 我想在其中显示每个菜单项的营养成分 我希望能够灵活地使用Measurement 类进行转换 Problem 问题是卡路里是在Measurement 中测量的 而蛋白质等其他属性是在Measuremen
  • iOS 中的 UITextView 中未显示笑脸(表情符号)?

    我已将所有 uni codes 表情符号字符 存储在 iphone 支持的 plist 中 当我直接写为 IBAction sendButtonSelected id sender NSMutableArray emoticonsArray
  • Document.NewPage() 不添加新页面

    我正在尝试向 pdf 文档添加新页面 但由于某种原因 这种情况没有发生 也许我的另一个问题https stackoverflow com questions 11428878 itextsharp splitlate not working
  • PWA - 清单属性“display”:“standalone”在 Android 上不起作用

    我注意到我的 PWA 的行为非常奇怪 我可以在 Windows 上以 独立 模式启动它 但是当我尝试在 Android 设备上执行相同操作时 它会忽略 独立 值并在 Chrome 中打开网址 Android 7 0 Chrome Andro
  • 在java 8中将日期转换为EST

    我正在尝试将日期转换为以下时区 但结果不符合预期 我得到的要求是例如从PMST to EST输出应该少2小时 PMST 新标准时间 谷草转氨酶 美东时间 国家标准时间 MST 太平洋标准时间 农业科学技术 哈斯特 String inputD
  • 如何在单个选项卡中显示新片段?

    我正在创建三个选项卡 每个选项卡包含一个片段 现在我想用同一选项卡中的新片段替换第一个选项卡的片段 如何在选项卡保持不变的情况下做到这一点 我的代码 Tab Widget java public class Tab Widget exten
  • R可以用于GIS吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一些 GIS 绘图 我想知道 R 是否可以用于此目的 以下是一些与我想要制作的概念相似的绘图示例 美国的温度图 或等高线图 颜
  • NHibernate,如何将属性映射到子选择

    我目前有一个遗留系统 专门使用 SP 来访问数据库 我的域对象看起来像这样 public class User EntityBase public virtual string Name get set public virtual str
  • 如何向 JFrame 添加文本?

    所以我正在使用 Eclipse WindowBuilder 设计 JFrame 此特定帧是一条错误消息 指出用户提供了无效的凭据 我添加了一个退出框架的按钮 现在需要显示实际的错误消息 指定的登录凭据无效 请提供有效的凭据 我做了一些搜索
  • 如何使用 EMBER.SORTABLEMIXIN?

    My FIXTURES包含我想根据 ID 排序的产品数组 Astcart Application FIXTURES name astr home products id 3 name Mobiles Accessories id 2 nam
  • 如何使用 jQuery 禁用浏览器中的工具提示?

    有没有办法在将鼠标悬停在填充了 标题 属性的元素上时禁用浏览器工具提示的显示 请注意 我不想删除标题内容 这是请求的代码 document ready function a clickableSticky cluetip splitTitl
  • 如何向 Android 应用程序添加项目符号列表?

    如何将项目符号列表添加到我的文本视图 很难做到 因为不支持 ul li ol 幸运的是 您可以使用它作为语法糖 8226 foo br 8226 bar br 8226 baz br 8226 是列表项目符号的 html 实体 更多选择在这
  • OAuth 2.0 教程? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在 Twisted 上编写 REST Web 服务 并且我想使用 OAuth2 0用于授权 是否有教
  • 基于多个 ScrollView 对单个 View 进行动画处理

    我正在开发一个应用程序 我试图在其中制作动画View基于多个滚动位置ScrollViews 这就是屏 幕的样子 上面的屏幕有 2 个部分 A View组件在顶部 A TabNavigator底部组件 中的每个选项卡TabNavigator
  • jQuery 同时缩放和淡入淡出

    所以我可以让一个 div 从它的中心枢轴很好地缩放 http jsfiddle net uTDay http jsfiddle net uTDay 但是 当我在 div 内添加内容时 过渡开始发生变化 http jsfiddle net u
  • 通过 JNI 加载 JVM 失败时如何收到错误消息?

    我想检索一条错误消息来解释 jvm 加载失败的原因 从此处提供的示例来看 http java sun com docs books jni html invoke html http java sun com docs books jni
  • C++ - 十进制到二进制的转换

    我写了一个 简单 花了我 30 分钟 的程序 将十进制数转换为二进制数 我确信有更简单的方法 你能告诉我吗 这是代码 include
  • 将 spring-boot 与 RESTEasy 集成

    我正在尝试构建 Spring Boot 应用程序的原型 我来自 Guice JAX RS 应用程序 因此我更喜欢标准 JAX RS 注释而不是 Spring MVC 我已经让 Jetty 启动并提供服务 Configuration Impo
  • 文本文件的信息增益计算?

    我正在尝试 使用信息增益 PCA 和遗传算法进行文本分类 但表演完之后预处理 词干提取 停用词删除 TFIDF 在文档中我很困惑如何继续进行信息获取部分 my out file包含word在那里TFIDF value like 字 TFID
  • 如何从 hashmap 中获取 5 个最高值?

    我有一个哈希映射 它链接存储为键的邮政编码和存储为哈希映射中的值的人口 哈希映射包含大约 33k 条目 我试图从 5 个邮政编码中获取 5 个最高人口值 并打印出与 5 个最高人口相关的 5 个邮政编码 但我无法理解如何做到这一点的算法 如