【Java基础篇】List接口
1. List
1. List特点
- 元素有序,可重复。
- 我们主要学习三种:
ArrayList
、Vector
、LinkedList
- 这三种都是List接口的实现类,使用上完全一样,只是实现原理不同,效率不同。
List集合判断元素是否相同,依据是元素的equals
方法。
1.2 ArrayList
- 底层数组实现
- 查找快,增删慢
- 线程不安全
1.3 Vector
- 与
ArrayList
基本一样 - 线程安全(线程同步),效率低
1.4 LinkedList
- 底层链表实现
- 增删块,查找慢
-
LinkedList:特有方法:
- addFirst();
- addLast();
- getFirst();
- getLast();
- 获取元素,但不删除元素。如果集合中没有元素,会出现
NoSuchElementException
- removeFirst();
- removeLast();
- 获取元素,但是元素被删除。如果集合中没有元素,会出现
NoSuchElementException
-
在JDK1.6出现了替代方法。
- offerFirst();
- offerLast();
- peekFirst();
- peekLast();
- 获取元素,但不删除元素。如果集合中没有元素,会返回null。
- pollFirst();
- pollLast();
- 获取元素,但是元素被删除。如果集合中没有元素,会返回null。
1.5 存取元素
List
集合元素存取方法一致- 使用
add()
方法增加元素 - 由于
List
集合有序,可以使用get()方法获取元素 - 元素的迭代(Iterator)
- 通过集合对象的iterator()方法获得迭代器Iterator
- 通过Iterator迭代器的hasNext()方法判断是否存在下一个元素
- 通过Iterator迭代器的next()方法获取下一个元素
- 元素的迭代(Enumeration)
- 迭代Vector集合中的元素可以使用Enumeration
- 通过
Enumeration
的hasMoreElements()
方法判断是否还有元素 - 通过
Enumeration
的nextElement()
方法返回下一个元素
Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。、
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
- add(index,element);
- addAll(index,Collection);
删
- remove(index);
改
- set(index,element);
查 - get(index):
- subList(from,to);
- listIterator();
- int indexOf(obj):获取指定元素的位置。
- ListIterator listIterator();
List集合特有的迭代器。ListIterator
是Iterator
的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator
。
该接口只能通过List集合的listIterator方法获取。
/*Collection 容器:存储对象的对象
* Set
* ArrayList:有顺序,可重复,底层实现用数组实现的存储,特点:查询效率高,增删除
* 效率低,thread不安全.但是一般使用ArrayList
* 数组长度是有限的,而ArrayList是可以存放任意数量的对象,长度不受限制
* */
public class ArrayListTest {
public static void main(String[] args) {
List<String> list=new ArrayList<String>(-1);
}
}
/*Collection 容器:存储对象的对象
* Set
* LinkedList:底层用双向链表实现的存储.特点:查询效率低,增删效率高,thread不安全.
* */
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<Object> list = new LinkedList<>();
list.add(0,"wo");
list.add(1,1);
list.add(2,'a');
System.out.println(list.get(2));
for (Object o:list
) {
System.out.println(o);
}
}
}
/*Collection 容器:存储对象的对象
* Set
* Vector:底层是用数组实现的List,和ArrayList底层实现一样,相关的方法都加的同步检查 synchronized
* 因此 thread安全,效率低
* */
public class VectorTest {
public static void main(String[] args) {
List<String> list=new Vector<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
for (String l:list
) {
System.out.println(l);
}
}
}