List集合包括四种类,分别是ArrayList、LinkedList、Vector、Stack。
ArrayList:元素的存储是顺序存储,可以根据数组的下标查询,查询速度快,但是在删除和插入元素时将慢,需要移动大量的元素。
public void Test1() { ArrayList arrayList=new ArrayList<>(); long startTime= System.currentTimeMillis(); arrayList.add(2); arrayList.add(3); arrayList.add("water"); arrayList.add("driver"); arrayList.add(999); arrayList.add("angel"); arrayList.remove(0); arrayList.remove(4); for (Object item : arrayList) { System.out.println(item); } long endTime=System.currentTimeMillis(); System.out.println("运行时间为:"+(endTime-startTime)+"ms"); }
上述例子中我试着读出其运行时间进行比较,实在太快了。
LinkedList:元素在其中存储是随机存储,首先说明LinkedList是一个双向链表,通过pre,element,next,每个元素都是由这3部分组成,它的优点在于删除,插入时只需要断开和连接删除位置的指针即可,不需要大量的移动元素。
public void Test2() { LinkedList linkedList=new LinkedList<>(); linkedList.add(888); linkedList.add(999); linkedList.add("blue"); linkedList.add("sky"); linkedList.add("waiter"); linkedList.add("grass"); linkedList.add(1314); linkedList.remove(1); linkedList.remove(4); for (Object item : linkedList) { System.out.println(item); } }
在这中间加一点迭代器的一些知识,既然是集合就会存在迭代的问题
public static void main(String[] args) { Collection c=new Vector<>(); for(int i=0;i<10;i++) { c.add(i); } Iterator it=c.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }
在一个集合中,使用了iterator()方法,就返回了一个迭代器类型,hasNext()表示迭代器中是否还有元素,next()表示迭代器中的下一个元素。
当然上介绍的ArrayList和LinkedList集合类在多线程中都是不安全的,下面引入安全类Vector类:
public static void main(String[] args) { Collection c=new Vector<>(); for(int i=0;i<10;i++) { c.add(i); } Iterator it=c.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }