List 中的常见子类介绍: Vector ArrayList LinkedList
ArrayList
API:是List 接口的大小可变数组的实现类, 实现所有可选列表操作。除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
数据结构为数组,长度是可变的(原理是:创建新数组+复制),查询的速度快(相对的)
弊端:在删除元素时会比较麻烦
Vector
API:从Java 2平台v1.2,这个类被改造为实现List接口,使其成为成员Java Collections Framework 。 与新集合实现不同, Vector是同步的。 如果不需要线程安全的实现,建议使用ArrayList代替Vector
数据结构和ArrayList 一样。查询速度慢,增删更慢
区别:ArrayList 不同步 Vector 同步
其实在开发中ArrayList 已经将Vector 替代掉了,当我们要进行并发访问时,有相应的解决办法。
LinckList
API: List 的链表实现,具备列表的所有操作
数据结构:链表结构,不同步,增删的速度很快。
弊端:在元素查找时效率低。 数组的查找时按照下标以此查找,而链表是通过地址的联系,按照地址查找,效率更低
ArrayList 中的方法和使用都和List差不多
——————————————————–详解 LinkedList
数据结构为链表,可以表示堆栈,队列
特有方法
都是围绕头和尾进行的
addFirst()
addLast()
getFirst()//获取头部元素
getLast()
removeFirst()//获取头部元素并且删除
removeLast()
LinkedList link = new LinkedList();//创建链表
while(!link.isEmpty){
System.out.println(link.removeFirst());//每次都取头元素,再删除头元素
}
面试题:利用LinkedList 创建一个堆栈或者队
**、将解决办法封装成对象向用户提供——创建一个堆栈或队列的数据结构对象,该对象中使用LinkedList 来实现
用户要使用堆栈或者是队列结构时,直接使用对象**
代码:
package Collection;
import java.util.*;
//利用LinkedList 创建一个堆栈或者是队列结构
/*
思路:创建一个堆栈或队列的数据结构对象,该对象中使用LinkedList 来实现
用户要使用堆栈或者是队列结构时,直接使用对象
*/
class Queue{
//1.封装一个链表数据结构
private LinkedList link;
//2.通过构造方法在队列初始化时,初始化链表对象
Queue(){
link = new LinkedList();
}
//3.提供各种方法
//添加元素
public void myAdd(Object obj){
link.addFirst(obj);
}
//获取元素
public Object myGet(){
return link.removeLast();
}
//判断队列是否为空,为空则为真
public boolean isNull(){
return link.isEmpty();
}
}
public class LinkedListTest {
public static void main(String[] args){
//使用被封装成对象的队列
Queue q = new Queue();
//添加元素
q.myAdd("itcast1");
q.myAdd("itcast2");
q.myAdd("itcast3");
q.myAdd("itcast4");
//获取元素
while(!q.isNull()){
System.out.println(q.myGet());
}
}
}