【发布时间】:2020-10-08 10:47:01
【问题描述】:
- 大家好,请帮忙,我今天发现了 NavigableMap,最初它对我有用,直到我执行以下操作。
- 当我填充 NavigableMap 时,请注意从字符串值的末尾开始,我添加了值 1-4,然后是 5。
- 字符串布局例如是“23816012269”,最后一个值 使它独一无二,因为我稍后在代码中使用它。
- 直到 4 的所有值都是重复的 (23816012269) ,然后 23806012269 是一个以不同字符串/数字为前缀的新值,我将继续使用新的重复值(以下一个序列 数字为后缀等)。
- 问题是,当我按照您在下面看到的顺序填充 NavigableMap 时,它会将 ("238060122695",...) 放在 NavigableMap 的第一个条目中,即使它是最后添加到 NavigableMap 中的。
- 现在,当我使用 NavigableMap.firstEntry().getKey() 时,它会将“238060122695”作为第一个条目。
- 我需要将 238160122691 作为第一个条目读取,因为这是作为第一个条目添加到地图中的。
- 钻研字符串值我知道2380在2381之前,不管,为什么我上次添加的时候它把它当作第一个条目,是不是因为SortedMap接口这样做。?如何避免
这是按执行顺序排列的代码:
NavigableMap.put("238160122691", arrayListValue);
NavigableMap.put("238160122692", arrayListValue);
NavigableMap.put("238160122693", arrayListValue);
NavigableMap.put("238160122694", arrayListValue);
NavigableMap.put("238060122695", arrayListValue);
【问题讨论】:
-
"即使这是最后添加到 NavigableMap 中的。" NavigableMap 在做什么似乎存在误解。它不按插入顺序排序,而是按元素相互比较的方式排序。这样一来,“2380...”显然比所有“2381...”都要小
-
@tobias_k 是的,我也将这部分添加到我的问题中,谢谢。但是我该如何避免呢?
-
A
NavigableMap与TreeMap类似,使用项目的compareTo、hashCode和equals方法来确定排序。它与插入顺序完全无关。如何避免?使用不同的数据结构,可能是LinkedHashMap。 -
NavigableMap 对地图进行排序,这就是重点。如果要插入 9oder,请使用 LinkedHashMap
标签: java data-structures hashmap