1.ArrayList 和 Vector 的区别是什么?
线程安全:Vector使用了 Synchronized来实现服务器托管网线程同步,是线程安全的,而
性能:ArrayList 在性能方面要优于 Vector。
扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,而 ArrayList 只会增加 50%。
2.Arraylist的初始化默认长度?
在jdk1.2到jdk1.6中的ArrayList的源码中,在构造方法上的确是创建了一个长度为10的数组。
从jdk_1.7之后,当你进行new ArrayList()的时候创建的是一个空数组初始容量就不是10了,而是一个空数组。
3.Arraylist的扩容原理?
当你第一次调用add进行添加元素的时候,会触发扩容。源码中我记得有个DEFAULT_CAPACITY常量=10。在第一次扩容的时候,会把数组长度变成10.如需要再次扩容,则扩容当前长度的1.5倍。是否再次扩容,取决于ArrayList在add之前的有效长度+1是否大于最大长度,如果大于就调用grow方法完成扩容。扩容的时候是用的位运算>>1,相当于之前容量的1.5倍。
4.为什么要ArrayList扩容要是自身长度的1.5倍
1.5能充分利用前面已经释放的空间。如果是2的话,新容量刚刚好永远大于过去所有废弃的数组容量。
扩容容量不能太小,防止频繁扩容,频繁申请内存空间,数组频繁复制
扩容容量不能太大,需要充分利用空间,避免浪费过多空间。
所以一般情况下会选择(1, 2)之间。
5.为什么要ArrayList扩容必须是1.5,而不是1.2,1.25,1.8或者1.75??
因为1.5 可以充分利用移位操作,减少浮点数或者运算时间和运算次数。
// 新容量计算
int newCapacity = oldCapacity + (oldCapacity >> 1);
Capacity是容量的服务器托管网意思。
>> 1,的数学意义就是 当前值*1.5,只不过是>>运算在计算机中更快。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
题目:有两个数组a和b服务器托管网,其中b有一个元素是a没有的,其他元素都相同,请找出b中这个多余的元素。 1 public class Test02 { 2 3 public static void main(String[] args) { 4 int[]…