List是一个接口,它继承了Collection接口,可以说是有序的Collection,可以根据索引(下标)随机取出对应位置的元素。
常用的方法(有的方法描述跟官方可能不太一致,使用的时候参考文档)
void add(T item) //添加元素
void add(T item, int index) //在指定位置处添加元素
void remove(int position) //删除第几个元素
void removeAll() //删除所有元素
int size();//List的元素个数
boolean isEmpty();//判断List是否为空
List和Set都继承了Collection接口,但它们各有不同:
List中的元素可重复,有序
Set中的元素不可重复,无序
List有三种实现的数据结构:ArrayList、 LinkedList 和 Vector,后面介绍。
Vector 类实现了一个动态数组,和ArrayList不同,Vector中的操作是线程安全即同步的。
Vector实际上是通过一个数组去保存数据的。当我们构造Vecotr时;若使用默认构造函数,则Vector的默认容量大小是10
当Vector容量不足以容纳全部元素时,Vector的容量会增加。若容量增加系数 >0,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。
Vector的克隆函数,即是将全部元素克隆到一个数组中。
ArrayList底层使用数组实现,可以说ArrayList是一个可以动态增长的数组,毫无疑问ArrayList访问数据的效率高,插入删除数据的效率较低,这都跟数组的自身特性相关联。
简单实现:
List接口自定义
package edu.nwpu.structure;
?
import java.util.Iterator;
?
public interface List <T>{
void add(T element);
?
void remove(int index);
?
void set(int index,T element);
?
T get(int index);
?
void print();
?
int size();
?
Iterator<T> iterator();
}
package edu.nwpu.structure;
?
import java.util.Arrays;
import java.util.Iterator;
?
/**
* @author June
* @param <T>
*
*/
public class MyList<T> implements List<T> {
final int DEFAULT_SIZE = 10;
final int MAX_SIZE=Integer.MAX_VALUE-8;
Object[] elements = {};
int size = 0;
?