2016-06-10 72 views
0

里面我有以下的树形图排序hasmap树形图

private TreeMap<Long, HashMap<Long, Entry>> index; 

项包含:

int tf //count 
ArrayList<long> off //positions 

对于树形图中的每个条目,我想通过TF的包含HashMap排序。在下面的图片中,[3]的tf具有更大的tf值[0],所以我想将它移动到开始位置。我怎样才能做到这一点?

enter image description here

回答

0

我相信,在你的问题的根本问题是,包含HashMap是没有定义排序。其次,更通用的变量定义可能证明是有用的:

private SortedMap<Long, SortedMap<Entry, Long>> index; 

注意到我切换了Entry和Long的顺序。这是因为Google地图只能根据关键字进行排序。您必须将Entry实现为Comparable,或者在实例化Map时提供自定义比较器。

0

您不能订购HashMap。试图这样做打破了HashMap存储的方式,并找到添加到它的元素

0

你在这里试图做什么(据我了解)是按树的值排序,而TreeMap只能按键排序。更多细节在这里 - TreeMap sort by value

您可以尝试编写自己的排序方法,并将排序结果存储在linkedHashMap而不是Treemap中。这样你就可以按照你添加到linkedHashMap的确切顺序来访问条目。 注意:每次更改都会发生在原始地图上,您需要对其进行排序并将其移至不同的linkedHashMap。这非常笨拙。

您可能会考虑为您的程序使用不同的对象模型。