1 List接口简介
List是Collection子接口,其最大的特点是允许保存有重复元素数据,其接口定义如下:
public interface List<E> extends Collection<E>
但是需要清楚的是List子接口对于Collection接口可是进行了方法扩充。
(1)获取指定索引上的数据:E get(int index)
(2)修改指定索引数据:E set(int index, E element)
(3)返回ListIterator接口对象:ListIterator<E> listIterator()
但是List本身依然属于一个接口,那么对于接口要想使用则一定要使用子类来完成定义,在List子接口中有三个常用子类,分别是ArrayList、Vector、LinkedList。
从JDK 1.9开始List子接口里面追加有一些static方法,以方便用户的处理。
范例:观察List中的静态方法
package org.lks.demo;
import java.util.List;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = List.of("hello", "another", "me", "!");
list.forEach(System.out::println);
}
}
这些操作方法并不是List传统用法,是在新版本之后添加的新功能。
2 ArrayList子类
ArrayList是List子接口使用最多的一个子类,但是这个子类在使用的时候也是有前提要求,所以本次来对这个类的相关定义以及源代码组成进行分析,在Java里面ArrayList的定义如下:
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
ArrayList子类的继承结构如下所示:
范例:使用ArrayList实例化List父接口
package org.lks.demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("hello");
list.addAll(list);
list.add("world");
System.out.println(Arrays.deepToString(list.toArray()));
}
}
通过本程序可以发现List存储的特征:
(1)保存的顺序就是其存储顺序;
(2)List集合里面允许存在有重复数据。
在以上的程序里面虽然实现了集合的输出,但是这种输出的操作是直接利用了每个类提供的toString()方法实现的,为了方便的进行输出处理,在JDK 1.8之后Iterable父接口之中定义有一个foreach()方法,方法定义如下:
(1)输出支持:public void forEach(Consumer<? super E> action)
范例:利用foreach()方法输出(不是标准输出)
package org.lks.demo;
import java.util.ArrayList;
import java.util.List;
public class JavaReflectDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("hello");
list.addAll(list);
list.add("world");
list.forEach(System.out::println);
}
}
需要注意的是,此种输出并不是在正常开发情况下要考虑的操作形式。
范例:观察LIst集合的其他操作方法
package org.lks.demo;
import java.util.ArrayList;
import java.util.List;
public class JavaReflectDemo {
public static void ma