你的代码是最好的。但是,在我看来,数据结构的整体设计需要进行一些大修:您正在使用SortedMap<?, SortedMap<?, ?>
,但未使用父映射的键。
你想用它来表达一个带有嵌套元素的树,你的任务是把树弄平吗?如果是这样,请创建一个支持您的方法的 Tree 类,或使用智能方式合并键:
public class NestedKey implements Comparable<NestedKey> {
private Comparable[] entries;
public NestedKey(Comparable... entries) {
assert entries != null;
this.entries = entries;
}
public int compareTo(NestedKey other) {
for(int i = 0; i < other.entries.length; i++) {
if (i == entries.length)
return -1; // other is longer then self <=> self is smaller than other
int cmp = entries[i].compareTo(other.entries[i]);
if (cmp != 0)
return cmp;
}
if (entries.length > other.entries.length)
return 1; // self is longer than others <=> self is larger than other
else
return 0;
}
}
NestedKey
用作 SortedMap 的键的条目NestedKey
通过比较其每个条目来与其他对象进行比较。存在于所有元素中但具有更多条目的 NestedKeys 被假定为更大。因此,您有这样的关系:
- 嵌套键(1, 2, 3) < 嵌套键(1, 2, 4)
- 嵌套键(1, 3, 3) < 嵌套键(2, 1, 1)
- 嵌套键(1, 2, 3) < 嵌套键(2)
如果您只使用一个使用 NestedKey 作为其键的 SortedMap,那么它的.values()
集合会自动返回所有条目,并将其展平。但是,如果您只想使用 SortedMap 的一部分,则必须使用.subMap
. 例如,如果您希望所有条目在 2 和 3 之间使用 NestedKeys,请使用.subMap(new NestedKey(2), new NestedKey(3))