所以我需要在两者之间做出选择
-
HashMap<String[], Object>
-
HashMap<ArrayList<String>,Object>
我的输入参数是:ArrayList<String> in
.
整体ArrayList<String> in
不能是键,因为它确实包含元素,这些元素不应该像数据库中的主键。我知道,第一个 n
元素传入ArrayList<String> in
应该是主键。
哪个会更快?
场景:
HashMap<ArrayList<String>, Object> hmAL = new HashMap<>();
HashMap<String[], Object> hmSA = new HashMap<>();
ArrayList<String> in = new ArrayList<>();
fillWithStuff(in);
//Which one would be faster?
getObject(in,hmAL,5);
getObject(in,hmSA,5);
选项 1:
private Object getObject(ArrayList<String> in, HashMap<ArrayList<String>, Object> hm, int n){
return hm.get(in.sublist(0,n));
}
使用选项 2:
private Object getObject(ArrayList<String> in, HashMap<String[], Object> hm, int n){
String[] temp = new String[n];
for(int i=0; i<n; i++)
temp[i]=in.get(i);
return hm.get(temp);
}
考虑:
- 哪个更快?缩短列表,还是复制到数组?
- 我在想,哪个散列(因为它是一个 HashMap)会更快。 ArrayList 或大小相等的数组的散列。还是没有任何区别?
最佳答案
使用 String[]
不是一个好主意,因为它没有实现 hashCode()
。这意味着如果您有 2 个字符串数组,它们是不同的对象但具有完全相同的值, map 将找不到它。
“hashCode”的实现似乎使用了每个字符串元素哈希码,因此映射中的查找会成功。所以我会选择这个。
也就是说,我宁愿根据列表中的对象自己构建一个 key 。
关于java - String[] 或 ArrayList 更适合作为 HashMap 中的 Key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331034/