String
底层是数组(char[]数组)
ArrayList
1.底层是数组(Object[]数组)
2.默认初始长度为10
3.扩容1.5倍(采用位运算int newCapacity = oldCapacity + (oldCapacity >> 1))
4.为什么是size不是length因为size是逻辑长度 length是物理长度(String是length)
5.可以指定长度new ArrayList<>(50)可以避免底层数组的多次拷贝,进而提高程序性能
6.底层拷贝使用System.arraycopy()该方法是native(由c或者c++实现效率很高)
7.数组一但在堆内存中创建出来,数组长度是不可变的
8.删除指定元素(元素位引用对象)需要重写equals方法
内存模型
扩容
删除
需要重写equals方法
Vector
1.线程安全 add方法和remove方法和get方法等
2.加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多