使用ArrayList<String> 和 使用HashMap<String, String> 存储键值对,哪个速度更快一些

暂时不考虑键值对的存储和map提供的方法的问题。


使用场景是这样的:我需要存储的是键值对,目前使用的是HashMap,有get和put操作,但是我想知道是不是使用ArrayList的话效果会更好一些,偶数存键,奇数存值。
我存储的数据量不多基本上都小于10个,但是需要创建的HashMap或ArrayList得很多,每一个存的数据比较少。

阅读 7.6k
6 个回答

不建议使用偶数存键,奇数存值的ArrayList方式,这个与我们写代码的一般逻辑相悖,对后来维护者也会造成很大的困扰。并且,现在手机性能都是很不错的,你的使用场景中,无需考虑性能的问题。

对于你所说的数据量小于10的情况下,ArrayList<String> 和 HashMap<String, String>误差很小,使用哪个都不会影响性能;但从技术层讨论这个问题,就多啰嗦两句^.^

ArrayList是有序集合,其底层其实就是一个数组,如果是遍历的话和存储相对于HashMap还是要快些,但其增加、删除会比较慢,特别是从列表中间增加、删除(扯远了)

而HashMap是一个无序哈希表,他的查询顺序是跟数据量直接关联的,简单点说就是数据量越大,查询越慢!

总结:
小数据:两者均可使用。
大数据:查询频繁使用ArrayList,增删、改频繁,使用HashMap。
超大数据:使用ArrayList;

这个和数据量有关

看你的使用方式啰,如果只是存储和遍历List快,如果要通过key查value的话Map快

虽然不知道你为什么要比较List<String>和Map<String,String>的存储那个更快,对于这两个接口都有不同的实现类,像ArrayList和LinkedList就有很大不同,而HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap这些Map的实现类行为,效率,保存对象周期以及key的等价策略更是有很大差异.当我没回答吧/(ㄒoㄒ)/~~

楼上对性能已经解释的很清楚了,
如果存储的数据小于10个的话,可以直接在声明时指定最大值10,这样可以节省内存空间,

List<String> list = new ArrayList<>(10);
Map<String, String> map = new HashMap<>(10);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题