我有来自Guava(Gooogle Collections)的TreeBasedTable
个对象。它的形式为TreeBasedTable<k1, k2, v>
。 k1
和k2
实施Comparable
。现在,当我显示表格时,我希望用户能够以不同的方式对其进行排序以更改值的顺序。
我尝试的方法是迭代表,并为每个值更改Compare方法中使用的变量。问题是它通过循环一次,然后返回一个NullPointerException
,我认为我已经缩小到试图改变顺序,同时迭代它(菜鸟错误,我知道)。
所以我想知道,重新排序此表的好方法是什么?
答案 0 :(得分:3)
您应该重新创建TreeBasedTable并向其提供另一个Comparator。请参阅guava documentation。另请注意,这内部使用的树必须使用适当的比较器进行排序(当您构建树时,比较器已知,因此树以特定方式构建)。提供其他比较器将导致构建新树。如果这不是您想要的行为,您应该考虑使用其他数据结构。
答案 1 :(得分:3)
如果您只是创建一个使用不同比较器对象创建的新TreeBasedTable,然后通过公共putAll方法将原始文件复制到其中,那该怎么办?每个元素的put将采用log(N),因此总时间应为N log(n),这大约是我重新排序所需的时间。
答案 2 :(得分:0)
通过切换其中一个标志修改比较器后,使用TreeBasedTable.create(TreeBasedTable<R, C, ? extends V>)
创建一个新的