JAVA集合

来源:互联网 发布:网络mc第一红人比赛 编辑:程序博客网 时间:2024/05/21 05:55

ArrayList

底层使用数组实现。创建时有初始容量,当容量不满足是进行扩容操作,然后将原数组内容复制到新数组。因此其查询效率较高。但是当其数据结构发生改变时(如增加时需要扩容,删除操作),其效率较低。

LinkedList

底层使用双向链表实现。每个节点只关注它的前后节点。因此增加,删除操作效率较高。查询时必须进行对链表进行遍历,因此查询效率较低。
    private static class Node<E> {        E item; // 存储值        Node<E> next; // 指向下一个节点        Node<E> prev; // 指向上一个节点        Node(Node<E> prev, E element, Node<E> next) {            this.item = element;            this.next = next;            this.prev = prev;        }    }

HashMap

本博文仅为方便博主自己学习。
此文对hashamap讲解更为清楚,有兴趣的同学可以去看看。>https://zhuanlan.zhihu.com/p/21673805

底层使用 数组+单向链表+红黑树存储键值对<K,V>重点在其put()和get()。

基本属性

1.table[] // 存储Node的数组2.Node<E> // 存储数据的对象    

数组长度为2的幂次方,

1.hash(key) & (table.length-1)等价于 hash(key) % table.length,但是效率更高2.数组扩容之后,元素需要重新排列。当数组长度为2的幂次方时,排列后的位置不是原位置就是原位置+原容量。提高了扩容后重新排序的效率。

扩容机制

1.将数组长度扩大为原来的2倍(数组长度可以自己设置,但是设置后会默认调整为2的幂次方,所以数组长度一直保持为2的幂次方);2.当链表长度大于8时转化为红黑树;3.当数组长度达到最大值时调整负载因子;
原创粉丝点击