我有以下树形图
private TreeMap<Long, HashMap<Long, Entry>> index;
条目包含:
int tf //count
ArrayList<long> off //positions
对于树形图中的每个条目,我想用tf对哈希图进行排序。在下面的图片中,[3]的tf具有更大的[0]的tf值,所以我想把它移动到开始。我怎么能这样做?
答案 0 :(得分:0)
我认为你问题的根本问题在于HashMaps根据定义是不可排序的。其次,更通用的变量定义可能有用:
private SortedMap<Long, SortedMap<Entry, Long>> index;
注意到我切换了Entry和Long的顺序。这是因为地图仅基于密钥进行排序。在实例化Map时,您必须使Entry实现Comparable或提供自定义Comparator。
答案 1 :(得分:0)
您无法订购HashMap。试图这样做会破坏HashMap存储的方式并找到添加到其中的元素
答案 2 :(得分:0)
你在这里尝试做的事情(据我所知)是通过其值对树图进行排序,而TreeMap只能按其键进行排序。更多详情 - TreeMap sort by value
您可以尝试编写自己的排序方法,并将排序结果存储在linkedHashMap中,而不是Treemap中。这样,您就可以按照将其添加到linkedHashMap的确切顺序访问条目。 注意:每次更改都会发生在原始地图上,您需要对其进行排序并将其移动到其他的LinkedHashMap。这是非常笨拙的。
您可以考虑为您的程序使用不同的对象模型。