欢迎大家关注我的个人博客—精灵王,获取更好的阅读体验以及最新的文章分享~
public interface List<E>extends Collection<E>
有序的 collection(也称为序列),允许重复的元素。 常用实现类:
-
ArrayList: 底层使用的是数组结构,特点:查询速度快,增删操作较慢,而且线程不同步. 要保证同步,可以使用:
List list = Collections.synchronizedList(new ArrayList());
进行包装,默认容量为10. 常用方法:add
,addAll
,remove
,indexOf
,subList
,contains
,isEmpty
…List<String> list = new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
System.out.println(list);容易忽略的方法:
trimToSize()
//修正容量大小,用多少,给多少,ensureCapacity(int minCapacity)
//预设大小
自定义ArrayList:/**
* 简单模拟ArrayList
* @author admol
*/
public class MyArrayList {
private Object[] data;
private int size;
public MyArrayList() {
this(10);
}
public MyArrayList(int i) {
data = new Object[i];
}
/**
* 返回拥有的元素数
* @return
*/
public int size() {
return size;
}
/**
* 获取指定位置上的元素
* @param i
* @return
*/
public Object get(int i) {
return data[i];
}
/**
* 添加元素
* @param obj
*/
public void add(Object obj) {
//存储空间已满,需要扩容
if (data.length == size) {
Object[] temp = new Object[size + (size >> 1)];
//数组复制:(被复制的数组,从第几个元素开始复制,复制到的目标数组,粘贴的开始位置,需要复制元素个数)
System.arraycopy(data, 0, temp, 0, size);
data = temp;
}
//存储空间未满
data[size++] = obj;
}
/**
* 删除指定位置的元素
* @param i
*/
public void remove(int i) {
//例:共10个元素,要删除的元素下标为3,实际上是从下标4开始向下标3复制粘贴(10-3-1)元素
System.arraycopy(data, i + 1, data, i, size - i - 1);
size