ArrayList、LinkedList、Vector的使用和优化。

ArrayList、LinkedList、Vector都实现了List接口,它们有什么区别呢?

ArrayList低层是数组来实现的,所以它适合查找和修改,不适合删除和增加。

LinkedList低层是双向链表来实现的,所以它适合删除和增加,不适合查找和修改。

Vector跟ArrayList相似,低层都是数组,它们唯一的区别就是vector是线程安全的,ArrayList是非线程安全的,所以Vector在使用起来,vector效率要底一些。为什么线程安全就效率底一些呢,因为在设计这个容器的时候,为了保证数据不能同时被两个线程访问,也就是为了保护数据不出错,所以访问容器里面的数据会有一个加锁和释放锁的过程,Vector内部就是通过在方法体上加Synchronize关键字来到达这效果。这就导致了这个容器的存储各方面效率相对较低,这也是经常使用ArrayList而很少Vector原因,跟们它们相似的还有HashMap和HashTable、StringBuffer和StringBuilder,因为同样的原因,HashMap和StringBuilder使用的比较多。

下面是一段模拟JDK中LinkedList的一个容器

class MyLinkedList<T>{
	
	int size=0;
	Node<T> first;//定义指向第一个节点的指针
	Node<T> last;//等译指向最后一个节点的指针
	
	public void add(T data){
		final Node<T> l = last;//定义一个临时的引用把最后一个节点保存起来
		final Node<T> newNode = new Node<T>(data, null);//新建节点
		last = newNode;
		if (l == null)//如果l为空,说明之前还没添加过节点
			first = newNode;//为初始节点赋值
		else	//如果l不为空,则说明之前已经添加过节点了,
			l.next = newNode;//
		size++;
	}
	
	public T get(int index){
		Node<T> n=this.first;//定义一个临时的引用保存第一个节点
		for(int k=1;k<=index;k++,n=n.next);
		return n.data;	
	}
	
}

class Node<T>{
	T data;
	Node next;
	public Node(T data,Node<T> next){
		this.data=data;
		this.next=next;
	}
}
只模拟了添加和查找函数,对于修改和删除思想应该差不多,这里的add函数,刚开始,我没写出来,因为感觉里面都是各种引用,指过来指过去最后把数据都指没了,后来参考jdk的源码,才搞明白,下面是我对add函数的理解以及图示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值