import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;
public class Test
{
public static void main(String[] args)
{
//ArrayList的特点,实现了List接口,储存有序的,可以重复的数据,查找和添加效率高,时间复杂度为O(1)
//底层使用了Object[]数组存储,删除和插入效率低,时间复杂度O(n)
//线程不安全
ArrayList arrayList = new ArrayList();
//底层会初始化数组,数组的长度为10,JDK7的是饿汉式直接创建了
Object[] objects = new Object[10];
arrayList.add("AA");
//JDK8.0的版本是首次添加元素时初始化数组objects = new Object[10];懒汉式的创建
objects[0] = "AA";
arrayList.add("BB");
objects[1] = "BB";
//确定ArrayList长度的情况下推荐直接写new ArrayList(10);
//当要添加第11个元素时,底层的数组已满,需要扩容,则默认扩容为原长度的1.5倍,并将原有元素复制到新的数组
//Vector的特点,实现了List接口,储存有序的,可以重复的数据
//底层使用了Object[]数组存储
//线程安全
Vector vector = new Vector();
Object[] objects1 = new Object[10];//初始化数组,长度为10
vector.add("AA");
objects1[0] = "AA";
vector.add("BB");
objects1[1] = "BB";
//LinkedList的特点,实现了List接口,储存有序的,可以重复的数据
//底层使用了双向链表存储,插入和删除效率低,时间复杂度为O(n)
//线程不安全,删除和插入操作效率高,时间复杂度为O(1)
LinkedList list = new LinkedList();//底层啥也没有,用的双向链表
list.add("AA");//将AA封装到Node对象中,list对象的首尾均指向此node对象
list.add("BB");//将BB封装到Node对象中,首指向AA,尾指向BB
//LinkedList使用的是双向链表,不需要考虑扩容问题,查找和添加效率高,时间效率高,时间复杂度为O(n),添加操作为O(1)
}
class Node
{
Node first;
Object object;
Node last;
}
}
import java.util.ArrayList; import java.util.LinkedList; import java.util.Vector; public class Test { public static void main(String[] args) { //ArrayList的特点,实现了List接口,储存有序的,可以重复的数据,查找和添加效率高,时间复杂度为O(1) //底层使用了Object[]数组存储,删除和插入效率低,时间复杂度O(n) //线程不安全 ArrayList arrayList = new ArrayList(); //底层会初始化数组,数组的长度为10,JDK7的是饿汉式直接创建了 Object[] objects = new Object[10]; arrayList.add("AA"); //JDK8.0的版本是首次添加元素时初始化数组objects = new Object[10];懒汉式的创建 objects[0] = "AA"; arrayList.add("BB"); objects[1] = "BB"; //确定ArrayList长度的情况下推荐直接写new ArrayList(10); //当要添加第11个元素时,底层的数组已满,需要扩容,则默认扩容为原长度的1.5倍,并将原有元素复制到新的数组 //Vector的特点,实现了List接口,储存有序的,可以重复的数据 //底层使用了Object[]数组存储 //线程安全 Vector vector = new Vector(); Object[] objects1 = new Object[10];//初始化数组,长度为10 vector.add("AA"); objects1[0] = "AA"; vector.add("BB"); objects1[1] = "BB"; //LinkedList的特点,实现了List接口,储存有序的,可以重复的数据 //底层使用了双向链表存储,插入和删除效率低,时间复杂度为O(n) //线程不安全,删除和插入操作效率高,时间复杂度为O(1) LinkedList list = new LinkedList();//底层啥也没有,用的双向链表 list.add("AA");//将AA封装到Node对象中,list对象的首尾均指向此node对象 list.add("BB");//将BB封装到Node对象中,首指向AA,尾指向BB //LinkedList使用的是双向链表,不需要考虑扩容问题,查找和添加效率高,时间效率高,时间复杂度为O(n),添加操作为O(1) } class Node { Node first; Object object; Node last; } }
|