集合-ArrayList与HashMap的区别

2021-03-23  本文已影响0人  挖打发

相同点:

都是线程不安全、不同步

都可以贮存null值

都是用size()方法获取元素的个数

不同点:

    1)实现的接口

    ArrayList实现了List接口(Collection(接口)->List(接口)->ArrayList(类)),底层使用的是数组;而HashMap现了Map接口(Map(接口)->HashMap(类)),底层使用的是Hash算法存储数据。

    2)存储元素与重复性

    ArrayList以数组的方式存储数据,里面的元素是有顺序,可以重复的;而HashMap将数据以键值对的方式存储,键的哈希码(hashCode)不可以相同,相同后面的值会将前面的值覆盖,值可以重复,里面的元素无序。

    3)添加元素的方法

    ArrayList用add(Object object)方法添加元素,而HashMap用put(Object key, Object value)添加元素。

    4)默认的大小和扩容

    在 Java 7 中,ArrayList的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。

    ArrayList扩容增量:原容量的0.5倍+1,如 ArrayList的容量为10,一次扩容后是容量为16;

    HashMap扩容增量:原容量的 1 倍,加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍时,进行扩容,如 HashSet的容量为16,一次扩容后是容量为32

    5)使用场景:

    如果需要快速随机访问元素,应该使用ArrayList。需要键值对形式的数据时,应该使用HashMap

为什么ArrayList查询快,增删慢:

因为ArrayList底层是数组实现的,根据下标查询不需要比较,查询方式为,首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率。

上一篇下一篇

猜你喜欢

热点阅读