gpt4 book ai didi

java - 为什么 TreeMap.values() 不反射(reflect)元素最初添加的顺序?

转载 作者:行者123 更新时间:2023-11-29 09:53:08 24 4
gpt4 key购买 nike

我需要一个数据结构,它既可以按键执行查找映射的角色,又可以转换为排序列表。输入的数据是一个非常简单的代码描述对(例如 M/MarriedD/Divorced 等)。查找需求是为了在用户在 UI 中进行选择后获取描述,其值为代码。排序列表要求是为了将数据提供给 UI 组件 (JSF),它采用 List。作为输入,并且值始终需要以相同的顺序显示(按描述的字母顺序)。

首先想到的是 TreeMap .因此,我按照我希望它在 UI 中显示的顺序从我的数据库中检索数据,并将其加载到我的 TreeMap 中,由代码键入,以便我稍后可以在用户做出选择后查找描述以进一步显示。至于从同一张 map 中获取排序列表,根据 this post ,我正在执行以下操作:

List<CodeObject> list = new ArrayList<CodeObject>(map.values());

但是,列表的排序顺序与它们放入 map 的顺序不同。该 map 声明为 SortedMap 并实现为 TreeMap:

SortedMap<String, CodeObject> map = new TreeMap<String, CodeObject>().

CodeObject 是一个简单的 POJO,仅包含代码和描述以及相应的 getter(通过构造函数设置 setter),其中的一个列表被提供给 UI 组件,它使用代码作为显示的值和描述。我过去只使用一个 List,它在排序方面工作得很好,但 List 没有提供一个有效的接口(interface)来按键查找值,我现在确实有这个要求。

所以,我的问题是:

  1. 如果 TreeMap 应该是按项目添加顺序排列的 map ,为什么 TreeMap.values() 不是按相同顺序排列的?
  2. 我应该怎么做才能满足我上面解释的要求,即拥有一个既可以用作查找映射又可以用作元素排序集合的数据结构?如果我以不同的方式使用它,TreeMap 会为我做这件事吗?还是我需要一种完全不同的方法?

最佳答案

TreeMap 维护键的自然顺序。您甚至可以按值的自然顺序/反向顺序对其进行排序(对比较器进行更多操作和自定义定义)。但这与说“插入顺序”不同。要维护插入顺序,您需要使用 LinkedHashMap。 Java LinkedHashMapHashMap 的子类 - 类比与 LinkedList 相同,您可以在其中维护下一个节点的踪迹。但是,它说它不能“保证”维护订单,所以如果您突然看到使用 HashMap

维护插入订单,请不要要求退款

关于java - 为什么 TreeMap.values() 不反射(reflect)元素最初添加的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com