List接口
特点:有序,有下标,元素可重复
方法:
- void add(index,Object o)//在index位置插入对象o
index表示下标
-
Object get(int index)//返回集合中指定位置的元素
-
List subList(int fromIndex,int toIndex)//返回fromIndex和toIndex之间的集合元素 返回一个子集合。含头不含尾
List al = new ArrayList();
//添加元素add
al.add(0,"a");
al.add(1,"b");
al.add(2,"c");
al.add(0,"d");
System.out.println(al);
al.remove(0);//删除元素remove
System.out.println(al);
System.out.println(al.size());//获取容器大小
System.out.println(al.get(2));//获取下标为2的元素
System.out.println(al.subList(1,2));//获取元素 从下标的1 到2-1,并返回列表
System.out.println(al.contains("b"));//判断包含
System.out.println(al.indexOf("b"));//返回元素 b的下标
遍历
-
使用for
get(i)
for (int i = 0; i<al.size() ; i++) { System.out.println(al.get(i)); }
-
增强for
for (Object obj:al ) { System.out.println(obj); }
-
迭代器iterator
Iterator it = al.iterator(); while (it.hasNext()){ Object i = it.next(); System.out.println(i); }
-
列表迭代器listIterator()
特点:允许按任意方向遍历列表,迭代期间修改列表,并获得迭代器在列表中的当前位置
hasPrevious()逆向迭代时 判断是否有前一个
set()迭代过程中替换元素
和Collection迭代器的区别 LIstIterator 可以向前或向后遍历,而且还可以添加删除修改元素
//使用列表迭代器 //从前往后 ListIterator lit= al.listIterator(); while(lit.hasNext()){ System.out.println(lit.nextIndex()+":"+lit.next()); } //从后往前 System.out.println("----------"); while (lit.hasPrevious()){ System.out.println(lit.previousIndex()+":"+lit.previous()); }
List实现类
ArrayList:
底层为数组,查询快,增删慢。效率快,线程不安全,Vector线程安全
增
删
遍历/迭代
判断/包含
查找 :根据内容找下标位置 indexOf 返回下标
源码分析:
DEFAULT_CAPACITY = 10 默认容量
如果没有向集合中添加任何元素 容量为0
elementdata 存放元素的数组
size 实际元素个数
Vector
底层是数组结构,查询快,增删慢。
线程安全
枚举器遍历
可以使用枚举器 elements() Enumeration进行遍历
Enumeration en = vector.elements();
while (en.hasMoreElements()){
String o = (String)en.nextElement();
System.out.println(o);
}
LinkedList
底层为双向链表,增删快,查询慢。
LinkedList linkedList = new LinkedList();
ArrayList和LinkedList的区别
ArrayList:必须开辟连续的空间,查询快,增删慢。
LinkedList:无需开辟连续空间,查询慢,增删快