您的位置:首页 > 编程语言 > Java开发

java的List集合们ArrayList vs. LinkedList vs. Vector

2017-12-14 17:21 369 查看






package demo;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

import org.junit.Test;

public class ArrayList_vs_LinkedList_vs_Vector {
@Test
public void test1() {
// TODO Auto-generated method stub
// ArrayList被实现为可调整的数组。随着更多元素被添加到ArrayList中,它的大小被动态地增加。
// 通过使用get和set方法可以直接访问元素,因为ArrayList本质上是一个数组。
/**
* ArrayList被实现为可调整的数组。随着更多元素被添加到ArrayList中,
* 它的大小被动态地增加。通过使用get和set方法可以直接访问元素,因为ArrayList本质上是一个数组。
*/
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(0, 1);
al.add(0, 2);
al.get(0);//经研究源码分析 ArrayList的本质是数组,和数组取值一样,arryname[0]
al.remove(3);
System.out.println(al);//[2, 1]
/**
* LinkedList被实现为一个双链表。它在插入和删除方面的性能优于Arraylist,但是在get和set方法上更差。
*/
LinkedList<Integer> ll = new LinkedList<Integer>();
ll.add(0, 1);
ll.add(0, 2);
ll.add(0, 3);
ll.add(0, 4);
ll.get(3);//经研究源码分析 LinkedList是一个双向链表,他会判断查找索引属于这条链子的前半段还是后半段,或选择头结点或选择尾节点进行顺藤摸瓜式的寻找
ll.remove(3);
/**
* 付一段get(int)源码: Node<E> node(int index) {
* // assert isElementIndex(index);
*
* if (index < (size >> 1)) {
* Node<E> x = first;
* for (int i = 0; i < index; i++)
* x = x.next;
* return x;
* } else {
* Node<E> x = last;
* for (int i = size - 1; i > index; i--)
* x = x.prev;
* return x;
* }
* }
*/
System.out.println(ll);//[2, 1]
/**
* 向量与ArrayList几乎是相同的,区别在于向量是同步的。因此,它的开销大于ArrayList。
* 通常,大多数Java程序员使用ArrayList而不是向量,因为他们可以自己进行显式同步。
*/
Vector<Integer> vl = new Vector<Integer>();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息