gpt4 book ai didi

java - 从 LinkedHashMap 的 keySet() 创建的 ArrayList 是否保留插入顺序?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:31 24 4
gpt4 key购买 nike

我得到的数据是这样的

{"Employee 1 of ABC", "ABCX"}, {"Employee 2 of ABC", "ABCY"}, {"Employee 3 of ABC", "ABCZ"}

通过 RefCursor 从数据库中获取。

我有一个案例需要保留从数据库中读取数据的顺序。由于我的数据是一种“键值”,我想到了使用有序的 Map 实现。因此选择了LinkedHashMap

//defined as a static map inside a common utlity class
public class Common{
public static final LinkedHashMap<String, String> empMap = new LinkedHashMap<String, String>();
}

//rs is the resultset
if (rs != null) {
while (rs.next()) {
key = rs.getString("name_text");
value = rs.getString("id");
Common.empMap.put(key, value);
}
}

我必须按照从数据库(游标)检索 key 的相同顺序将 key 传递给客户端。

List<String> empList = new ArrayList<String>(Common.empMap.keySet());

keySet() - The documentation says "Returns a Set view of the keys contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa"

我期望的是,因为 ArrayList 也是一个有序集合,所以我应该以与它被检索/插入到 Map 中相同的方式获取键。

当我做一个示例测试程序时,我得到了预期的结果。

public class LinkedMap {    
public static void main(String[] args) {
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
map.put("Employee 1 of ABC", "ABCX");
map.put("Employee 2 of ABC", "ABCY");
map.put("Employee 3 of ABC", "ABCZ");
ArrayList<String> list = new ArrayList<String>(map.keySet());
System.out.println(list);
}
}

output: [Employee 1 of ABC, Employee 2 of ABC, Employee 3 of ABC]

但是我的问题是,如果这是有保证的输出,还是我只是随机得到,它可能会有所不同(?),

  • 2019 年 9 月 14 日更新

我将答案与问题分开以避免混淆。

最佳答案

有保证的。

即使 Set 接口(interface)本身不保证任何顺序(好吧,LinkedHashSet 可以),Map 实现的事实本身保证插入顺序几乎可以保证您也将按此顺序获得 key 。 .keySet() 返回的接口(interface)恰好是一个 Set,因为 Map 中的键保证是唯一的。

如果不是,请考虑在这种情况下会发生什么:

// case 1
for (final Map.Entry<K, V> entry: map.entrySet()) {
// entry.getKey(), entry.getValue()
}

// case 2
for (final K key: map.keySet()) {
V value = map.get(key);
}

如果这两个代码有两种不同的行为,呃...

关于java - 从 LinkedHashMap 的 keySet() 创建的 ArrayList 是否保留插入顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852610/

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