特有方法:凡是可以操作脚标的方法都是该体系的特有方法。
List 集合可以实现增,删,改,查等功能。
具体实现的方法:
增:add(index,element); addall(index,);
删:remove(index);
改:set(index,element);
查:get(index); subList(from,to); listIterator();
示例代码:
package com.L.List;
import java.util.ArrayList;
public class List01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
// 增
list.add("L01");
list.add("L02");
list.add("L03");
list.add("L04");
System.out.println(list);
// 删
list.remove(1);// 删除第二条元素
System.out.println(list);
// 改
list.set(0, "L0change");// 修改第一条元素
System.out.println(list);
// 查
System.out.println(list.get(0));//获取第一个元素
System.out.println(list.subList(0, 2));//获取前两个元素 注意subList(from,to)方法的两个参数是包含头不包含尾的
}
}
若要将元素依次取出我们可以使用迭代器Iterator,具体操作如下:
Iterator it = list.iterator();// 得到list的迭代器
while (it.hasNext()) {// 通过循环将元素取出
System.out.println(it.next());
}
Iterator不仅是可以迭代元素,还可以对集合进行删除操作,这里仅限于删除一种操作。同时在进行增删操作时系统会报出NoSuchElementException异常,产生这种异常的原因是,我们队集合进行了更新,但是我之前得到的迭代器Iterator并不知道list集合更新了,还是原来缓存的list,所以当迭代器迭代到已经被删除的元素时,因为找不到元素则报出NoSuchElementException异常。
我们想既然Iterator只能对集合进行删除,那为什么不能增加元素呢?大家可以试一下这段代码:
Iterator it = list.iterator();// 得到list的迭代器
while (it.hasNext()) {// 通过循环将元素取出
if (it.next().equals("L04")) {
list.add("L05");
it.remove();
}
System.out.println(it.next());
}
系统肯定会报出ConcurrentModificationException(并发修改异常)。因为我们在通过迭代器对集合进行操作时,只是对list的一个引用经行修改(准确的说Iterator只是list的一个引用),同时迭代器在迭代list中的元素,而这个迭代器无法判断这个在迭代器中新添加的元素是否需要打印出来的,这时就产生了ConcurrentModificationException(并发修改异常)。
同理若对元素进行修改也会发生此异常。
如果有需要在迭代器里经行元素的增,改,我是是否有其他办法呢?实时上是有的。
实现这种需求我们就需要用到ListIterator,示例代码如下:
ListIterator listit = list.listIterator();// 得到ListIterator迭代器
while (listit.hasNext()) {
if (listit.next().equals("L04")) {
// listit.add("L05");//在L04后面添加一个元素L05
listit.set("L04Change");// 将L04修改为L04Change
}
}
System.out.println(list);
所以利用ListIterator就可以对元素进行增删改查了。利用ListIterator还可以对集合进行其他操作这里就不一一说明了。List集合又可细分为ArryList,LinkedList,Vector。它们的区别就在于底层数据结构不同。
区别:
ArryList:底层的数据结构使用的是数组结构。特点:查询速度快。增删稍慢。线程不同步。
LinkedList:底层的数据结构使用的是链表结构。特点:增删速度快。查询稍慢。
Vector:底层是数组结构。线程同步。被ArryList替代了。
具体的这三种类型到底怎么使用就靠大家翻阅java文档,多多练习了