ArraysList分析
Arrays底层源码使用的其实是数组,初始大小为10。而可以无限存放数值的原因是:数组内的扩容机制,当所要存放的数组数量超过10时,就会自动扩容以保存更多的值。索引则使用的是,
特点:查询效率高,增删效率低,线程不安全。使用较多。
查询效率高:直接使用数组的索引值的方法。
增删效率低:每次进行增删都会进行一次便利。
线程不安全:(以小编水平暂时无法解释)
手写一个ArraysList:(仅供参考)
public class ArraysTest<E> {
private Object[] list = new Object[10];
private int size = 0;
public void add(E e) {
size++;
for(int i =0; i < size;i++ ) {
if(list[i] == null) {
list[i] = e;
return;
};
append(e,size);
}
}
//当数组的大小不够时使用此方法扩大
private void append(E e,int size) {
Object[] temp = new Object[list.length+ (list.length>>1)];
int i1 = 0;
for( ; i1<list.length;i1++) {
temp[i1] = list[i1];
}
list = temp;
list[size + 1] = e;
}
//在指定位置添加值
public void add(E e,int index) {
if(list[index] == null) {
size++;
list[index] = e;
}else {
System.out.println("There isn't null");
}
}
@Override
public String toString() {
System.out.print("[");
System.out.println("[");
for(int i = 0;i < size-1; i++) {
System.out.println(list[i]+",");
}
System.out.print(list[size-1]+"]");
return null;
}
//用于获得索引位置的值
public Object get(int index) {
if(list[index] != null) {
return list[index];
}else {
return "抱歉!数组中没有这个值";
}
}
//用于在数组中指定位置放入值
public void set(E e, int index) {
if(index <= list.length) {
list[index] = e;
}else if(index > list.length && index > (list.length+(list.length>>1))) {
append(e,index);
}else{
set(e,index);
}
}
}