【发布时间】:2015-09-29 19:51:11
【问题描述】:
我得到类似的数据
{"ABC 员工 1", "ABCX"}, {"ABC 员工 2", "ABCY"}, {"ABC 员工 3", "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);
}
}
我必须按照从数据库(光标)中检索密钥的相同顺序将密钥传递给客户端。
List<String> empList = new ArrayList<String>(Common.empMap.keySet());
keySet() - 文档说“返回键的集合视图 包含在这张地图中。该集合由地图支持,因此更改为 地图反映在集合中,反之亦然”
我期望的是,由于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);
}
}
输出:[ABC 员工 1,ABC 员工 2,ABC 员工 3]
但是我的问题是,如果这是保证输出还是我只是随机得到的,它可能会有所不同(?),
- 2019 年 9 月 14 日更新
我将答案与问题分开以避免任何混淆。
【问题讨论】:
-
我喜欢变量类型是最具体的
LinkedHashMap,而不是模糊的Map:) -
我认为,拥有接口或具体的类引用对我的用例没有影响。但我必须承认,使用具体类而不是接口是错误的。还是你觉得不一样?
-
不,我认为最好对本地/实例变量使用最具体的类型。
标签: java linkedhashmap