数组
数组Array就是一个已知长度,已知数据类型的容器,大小不可变,可以通过.length得到数组长度,一般通过循环来查找或增加删除,同时要相应的改变其他值。
但数组便于遍历和通过下标访问相应元素。
列表
List是一个接口,所以List不能被构造不能定义对象。其内部有各种方法(比如增加查找删除等)的雏形,但是方法只申明了,里面内容为空。因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限。
数组列表
那么结合两者的优势及缺陷,Java中的列表ArrayList相当于一个C++中STL容器里的方法,内含比如增加(add)、删除(remove)、获取(get)等方法(已定义好),参考其源代码,可以在运用时加快效率,迅速达到目的。
ArrayList是一个类,它实现了List接口,可以被构造。
ArrayList没有固定的长度,可以动态地改变,便于数据的修改。
也由于没有固定的长度,整个ArrayList作为一个对象出现,在定义时只需定义对象即可,即不需要加上[ ]。
我们可以自己手动写一个ArrayList加深印象,
这是list接口:
public interface list<E> {
//增删获查
public boolean add(E e);
public boolean delete();
public boolean delete(int index);
public int getsize();
public boolean get(int index);
}
然后ArrayList类中:
public class Arraylist<E> implements list<E>{
//定义一个数组
Object[] array = new Object[0];
//尺寸
int size = array.length;
public boolean add(E e) {
Object[] data = new Object[size+1];
System.arraycopy(array, 0, data, 0, size);
array = data;
array[size] = e;
size++;
return true;
}
public boolean delete() {
Object[] data = new Object[size-1];
System.arraycopy(array, 0, data, 0, size-1);
array = data;
size--;
return true;
}
public boolean delete(int index) {
Object[] data = new Object[size-1];
System.arraycopy(array, 0, data, 0, index-1);
System.arraycopy(array, index, data, index-1, size-index);
array = data;
size--;
return true;
}
public int getsize() {
return size;
}
public boolean get(int index) {
System.out.println(array[index]);
return true;
}
public static void main(String[] args){
Arraylist<Integer> data = new Arraylist<>();
data.add(555555555);
data.add(666666666);
data.delete(1);
for(int i = 0; i<data.getsize(); i++){
data.get(i);
}
}
}