java – 在Map中查找最高n值
我有一个String-> Integer的大地图,我想在地图中找到最高的5个值.我目前的方法是将地图转换为对(键,值)对象的数组列表,然后在获取前5之前使用Collections.sort()进行排序.键可以在操作过程中更新其值.
我认为这种方法是可以接受的单线程,但是如果我有多个线程,所有触发转置和频繁排序它似乎不是很有效.替代方案似乎是维护最高5个条目的单独列表,并在地图上的相关操作发生时保持更新. 请问我有什么建议/替代方案可以优化吗?如果有好处,我很乐意考虑不同的数据结构. 谢谢! 解决方法
你可以采取一种方法.当线程请求映射的“已排序视图”时,创建映射的副本,然后处理该映射的排序. public List<Integer> getMaxFive() { Map<String,Integer> copy = null; synchronized(lockObject) { copy = new HashMap<String,Integer>(originalMap); } //sort the copy as usual return list; } 理想情况下,如果您有多个线程访问的某个状态(例如此映射),则将该状态封装在其他类的后面,以便每个线程不直接更新映射. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |