java - String[] 或 ArrayList 更适合作为 HashMap 中的 Key?

标签 java arrays string performance arraylist

所以我需要在两者之间做出选择

  1. HashMap<String[], Object>
  2. 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);
}

考虑:

  1. 哪个更快?缩短列表,还是复制到数组?
  2. 我在想,哪个散列(因为它是一个 HashMap)会更快。 ArrayList 或大小相等的数组的散列。还是没有任何区别?

最佳答案

使用 String[] 不是一个好主意,因为它没有实现 hashCode()。这意味着如果您有 2 个字符串数组,它们是不同的对象但具有完全相同的值, map 将找不到它。

“hashCode”的实现似乎使用了每个字符串元素哈希码,因此映射中的查找会成功。所以我会选择这个。

也就是说,我宁愿根据列表中的对象自己构建一个 key 。

关于java - String[] 或 ArrayList 更适合作为 HashMap 中的 Key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331034/

相关文章:

java - 在 Java 或 Groovy 中,如何找到 byte[] 的文件类型?

java - 如何将不同类型的对象包装在一个包装对象中

c++ - 如何从缓冲区读取特定字符串

c++ - 为什么是 `std::is_constructible_v<int[2], int, int> == false`

php - 如何将PHP中的字符串截断为最接近特定字符数的句子?

javascript - 如何使用JS仅在字符串中间按空格拆分字符串

java - 什么是主机动态发现?那么它在Java RMI中是如何应用的呢?

Java列表比较导致错误我无法确定

php - 从一长串ffmpeg数据中提取相关信息

java - 如何在 Android 中将数组列表存储到字符串中并将其作为请求发送到服务器?