有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java树映射中检索N个最相关的对象

根据this question,我订购了一台Java Map,如下所示:

ValueComparator bvc =  new ValueComparator(originalMap);
Map<String,Integer> sortedMap = new TreeMap<String,Integer>(bvc);
sortedMap.putAll(originalMap);

现在,我想以top-K的方式从地图中提取K最相关的值。有没有一种高效的方法可以在不遍历地图的情况下实现这一点

另外,一些类似的问题(例如,this)要求解决排名前1的检索问题


共 (1) 个答案

  1. # 1 楼答案

    不,如果您使用Map,则不会。你必须重复一遍

    你考虑过使用PriorityQueue吗?这是Java对堆的实现。它具有插入任意元素和删除“最小值”的高效操作。你可以考虑在这里这样做。你可以把它们放在一个按相关性排序的Map中,而不是一个PriorityQueue中,最相关的作为根。然后,要提取最相关的K,只需从PriorityQueue中弹出K元素

    如果需要map-like属性(从String映射到Integer),那么可以编写一个类,在内部将所有内容保存在PriorityQueueHashMap中。当你插入时,你同时插入两个;删除最小元素时,从PriorityQueue弹出,然后告诉您还需要从HashMap中删除哪个元素。这仍然会为您提供日志时间插入和最小删除