一、List接口
List接口继承了Collection父接口,有序可重复。有序表现为:1、存和取的顺序一样 2、可以像数组一样可以通过下标进行元素的访问。
- get(int index):根据提供的下标获取对应的元素值
- set(int index,Object value):将指定下标位置的而元素修改为对应的值
- indexOf(Object obj):获取指定元素对应的下标
- lastIndexOf():获取元素最后一次出现的下标
- 循环遍历:List集合的遍历有三种方式 1.使用迭代器【通用的迭代方式 万能的迭代】2.使用foreach 3.可以使用普通的for循环
- remove(int index):根据下标删除指定位置的元素
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("stu1");
list.add("stu2");
list.add("stu3");
list.add("stu4");
System.out.println("集合的长度:" + list.size());
System.out.println("第2个元素是:" + list.get(1));
System.out.println("stu3元素的下标是:" + list.indexOf("stu3"));
System.out.println("元素最后一次出现的下标:" + list.lastIndexOf("stu4"));
System.out.println("删除第三个元素"+ list.remove(2));
System.out.println(list);
}
上述代码:刚开始遇见了一个问题:意思是说在使用ArrayList集合时并没有显示的指定集合中存储什么类型的元素,会产生安全隐患,这涉及到泛型安全机制的问题。后来在ArrayList后加了string解决了该问题。
二、List接口的常用实现类
2.1 ArrayList
package test.setof;
import java.util.Arrays;
import java.util.Collection;
public class ArrayList01<E> {
//ArrayList源码分析
private static final int DEFAULT_CAPACITY =10;
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA= {};
transient Object[] elementData;
private int size;
public ArrayList01() {
this.elementData = new Object[2];
}
public ArrayList01(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
}else if (initialCapacity==0) {
this.elementData=EMPTY_ELEMENTDATA;
}else {
throw new IllegalArgumentException("Illegal Capacity:"+initialCapacity);
}
}
public ArrayList01(Collection<? extends E>c) {
elementData = c.toArray();
if ((size=elementData.length) != 0) {
if (elementData.getClass()!= Object[].class) {
elementData=Arrays.copyOf(elementData, size,Object[].class);
}else {
this.elementData=EMPTY_ELEMENTDATA;
}
}
}
public static int getDefaultCapacity() {
return DEFAULT_CAPACITY;
}
public static Object[] getDefaultcapacityEmptyElementdata() {
return DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
}
为什么在无参构造器中创建一个长度为0的数组?
无参构造器的作用是将elementData初始化一个Object类型的空数组。this.elementData=EMPTY_ELEMENTDATA;这是初始化一个长度为0的空数组
2.2 LinkedList
LinkedList底层是基于一个双向数据链表实现,链表中每个元素对应的空间不连续(随机的)