1.Arraylist添加元素的过程和扩容机制:
add()方法添加元素
先检查底层数组能不能放下,可以就添加到末尾,不可以就会用到grow()方法扩容
if(newCapacity-elementDate.length>0)
grow(minCapacity)//扩容 扩容为原来1.5倍
(数组复制 创建一个新数组 加进去 把原来的数组覆盖)
注意:有扩容机制就要想到size()方法 考虑到数组长度和实际长度可能不等 size()表实际长度 不是听到长度就只想到length()
2.Arraylist和Linkedlist的区别:
本质区别:(内部存储数组的方式)
Arraylist内部使用动态数组存储(连续空间) Linkedlist内部使用循环双向链表存储(不连续)---->导致时间复杂度不同
3.HashMap添加元素的的底层原理:
put()方法添加元素:(撞位置-->添加链表-->红黑树-->扩容2倍)
当向HashMap中添加元素时,先用key计算出一个哈希值,通过哈希算法,计算出此key在哈希表中的位置,如果这个位置上没有元素,直接插入
当再次插入值时,如果计算出的位置上已经有值存在了,那么就会向元素的下一位添加链表,当链表长度等于8时,将链表转为红黑树,当数组被使用4分之3(即12)时就扩容为原来2倍(2的倍数 扩容的复制方便)
当数的结点个数删为6 转为链表