List接口和常用方法
常用实现List接口的类有ArrayList、LinkedList、Vector
List集合类中元素添加顺序和取出顺序一致
List list = new ArrayList();
list.add("XiAn");
list.add("BeiJing");
list.add("ShangHai");
list.add("XiAn");
System.out.println("list = " + list);
//输出结果:
//list = [XiAn, BeiJing, ShangHai, XiAn]
list集合中每个元素都有对应的顺序索引,像数组下标
System.out.println("list[3]="+list.get(3));
//输出结果:
//list[3]=XiAn
1.常用方法
1.1 void add(int index, E element) 添加元素
list.add(1,"南京");
System.out.println(list);
//输出结果:
//[XiAn, 南京, BeiJing, ShangHai, XiAn]
参数index可以省略,省略后默认加在最后。
1.2 boolean addAll(int index, Collection c) 添加元素集合
//创建一个list2,并且录入数据
List list2 = new ArrayList();
list2.add("上海");
list2.add("深圳");
//将list2中所有内容插入到XiAn后面去
list.addAll(1,list2);
System.out.println(list);
//输出结果:
//[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
参数index可省略,省略后默认加在最后。
1.3 Object get(int index) 获取index位置的元素
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
//list2=>[上海, 深圳]
System.out.println(list.get(6));
System.out.println(list2.get(1));
//输出结果:
//XiAn
//深圳
若超过index实际最大值,会报下标越界错误。
1.4 int indexOf(Object o) 获取元素首次出现的下标
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
//list2=>[上海, 深圳]
System.out.println(list.indexOf("XiAn"));
System.out.println(list2.indexOf("XiAn"));
//输出结果:
// 0
// -1
返回元素o在当前集合中首次出现的位置,没有则返回-1。
1.5 int lastIndexOf(Object o) 获取元素最后一次出现的下标
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
//list2=>[上海, 深圳]
System.out.println(list.lastIndexOf("XiAn"));
System.out.println(list2.lastIndexOf("XiAn"));
//输出结果:
// 6
// -1
若集合中没有该元素返回-1.
1.6 boolean remove(Object o) / E remove(int index)
删除对应元素 / 删除下标对应元素
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
list.remove("XiAn");
list.remove(1);
System.out.println(list);
//输出结果:
//[上海, 南京, BeiJing, ShangHai, XiAn]
若无对应元素,则集合不做操作 / 若无对应下标,则抛出异常->下标越界
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
list.remove("南海");
System.out.println(list);
//输出结果:
//[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
1.7 E set(int index, E element) 将index位置的元素替换为elem
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
list.set(1, "成都");
System.out.println(list);
//输出结果:
//[XiAn, 成都, 深圳, 南京, BeiJing, ShangHai, XiAn]
以该集合为例,参数index必须在0~6之间,不能为7代表着不能插入在最后,否则抛出下标越界
1.8 List subList(int fromIndex, int toIndex)
获取下标范围为 [ fromIndex,toIndex ) 的元素子集
//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, 成都]
List list3 = list.subList(1,4);
System.out.println(list3);
//输出结果:
//[上海, 深圳, 南京]
范围为[A,B),则说明toIndex在以该集合为例时最大可以取到7,超出则抛出异常
2. List接口的三种遍历方式
//创建
List list = new ArrayList();
list.add("喜羊羊");
list.add("美羊羊");
list.add("懒羊羊");
2.1 Interator(迭代器)
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
//输出结果:
// 喜羊羊
// 美羊羊
// 懒羊羊
若对正在迭代的集合进行操作(add\remove\clear),迭代器就不再合法,此时使用迭代器会抛出ConcurrentModificationException异常。
//错误使用
List list = new ArrayList();
Iterator iterator = list.iterator();
list.add("喜羊羊");
list.add("美羊羊");
list.add("懒羊羊");
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
若要在迭代时对集合进行删除操作,Iterator接口有自带的remove方法,会移除正迭代的元素。
2.2 增强for
for (Object o :list) {
System.out.println(o);
}
2.3 普通for
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}