java常⽤类--List类java常⽤类--List类
1、ArrayList类
ArrayList的性质:
1、ArrayList的实质是⼀个数组,添加是对数组的动态扩容
2、ArrayList的数组容易查,但是不⽅便频繁的增加和删除
ArrayList初始化源码分析:
ArrayList<String> list = new ArrayList<>()
/**
* 这样创建的⼀个ArrayList对象,它的长度为多⼤呢?
* 通过查看源码我们可以得到,刚开始new对象的时候长度为0
*/
/
/1、查看空参后构造⽅法
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
//2、查看DEFAULTCAPACITY_EMPTY_ELEMENTDATA这个默认值
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
* 得出结论:刚开始创建空参ArrayList的长度默认为0
*/
但是java中的Api说ArrayList空参构造后长度默认为10,这是怎么回事呢?
//3、我们继续查看源码,查看它的add⽅法
private void add(E e, Object[] elementData, int s) {
if (s == elementData.length)
elementData = grow();
elementData[s] = e;
size = s + 1;
}
//4、通过这个源码发现,有⼀个grow()⽅法,我们继续往下查看
private Object[] grow(int minCapacity) {
return elementData = pyOf(elementData,
newCapacity(minCapacity));
}
/
/5、通过这个源码我们发现这个扩容数组的⽅法中有newCapacity(minCapacity)这样⼀个⽅法,我们继续往下查看源代码private int newCapacity(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity <= 0) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
return Math.max(DEFAULT_CAPACITY, minCapacity);
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return minCapacity;
}java arraylist用法
return (newCapacity - MAX_ARRAY_SIZE <= 0)
newCapacity
: hugeCapacity(minCapacity);
}
/**
* 终于在这个源代码中,我们发现⼀个默认参数,DEFAULT_CAPACITY,当oldCapacity=0的时候
* 会运⾏return Math.max(DEFAULT_CAPACITY, minCapacity)这个代码,因此我们继续点击查看
* DEFAULT_CAPACITY的值
*/
private static final int DEFAULT_CAPACITY = 10;
从上⾯的源码得出结论:
1、开始创建ArrayList对象的时候,数组长度为0;
2、当开始使⽤add⽅法的时候,会把长度设置为10;
3、并且ArrayList在扩容的时候,每次扩容1.5倍;
2、Vector类
1、和ArrayList实现的功能类似
2、Vector的线程是同步的,ArrayList的线程是异步的
3、Vector的的初始和ArrayList⼀样,但是ArrayList扩容是固定的1.5倍,Vector是指定的扩容增量
3、LinkedList类
1、操作和ArrayList没什么区别,但是这个是⽤双向链表实现的,ArrayList是⽤数组实现的
2、LinkedList适合增删数据,但是不适合频繁查数据
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论