Java学习-集合框架-List实现类-LinkedList

List实现类

1.Arraylist:数组结构实现,查询快,增删慢,运行效率快,线程不安全
2.Vector:数组结构实现,查询快,增删慢,运行效率慢,线程安全
3.LinkedList:链表结构实现,增删快,查询慢

LinkedList

双向链表

LinkedList linkedList = new LinkedList<>();
Student s1 = new Student("A",20);
Student s1 = new Student("B",21);
Student s1 = new Student("C",22);
//增
linkedList.add(s1);
linkedList.add(s2);
linkedList.add(s3);
sout(linkedList.size());//→ 3
sout(linkedList.toString());//→ [Student[name=A,age=20],[name=B,age=21],[name=C,age=22]]
//删
//linkedList.remove(s1);
//sout(linkedList.size());//→ 2
//linkedList.clear();
//遍历
for(int i=0;i<linkedList.size();i++)
	sout(linkedList.get(i));
//→ Student [name="A",20] \n Student [name="B",21] \n Student [name="C",22]
for(Object object:linkedList){
	Student s = (Student)object;
	sout(s.toString());
}
//→ Student [name="A",20] \n Student [name="B",21] \n Student [name="C",22]
Iterator it = linkedList.iterator();
while(it.hasNext()){
	Student s = (Student)it.next();
	sout(s.toString());
}
//→ Student [name="A",20] \n Student [name="B",21] \n Student [name="C",22]
ListIterator lit = linkedList.listIterator();
while(lst.hasNext()){
	Student s = (Student)lit.next();
	sout(s.toString());
}
//→ Student [name="A",20] \n Student [name="B",21] \n Student [name="C",22]
//判断
sout(linkedList.contains(s1));//→ true
sout(linkedList.isEmpty());//→ false
//获取
sout(linkedList.indexOf(s2));//→ 1

LinkedList 源码分析

transient int size = 0;//集合大小,初始为空
transient Node<E> first;//头节点
transient Node<E> last;//尾节点
public boolean add(E e){
	linkLast(e);
	return true;
}
void linkLast(E e){
	final Node<E> l = last;//①链表尾节点
	final Node<E> newNode = new Node<>(l,e,null);//②新建节点 newNode,头指向尾结点l,尾指向null
	last = newNode;//③
	if(l==null)//头结点
		first = newNode;//④
	else //非头结点
		l.next = newNode;//⑤
	size++;
	modCount++;
}
private static class Node<E>{
	E item;//数据
	Node<E> next;
	Node<E> prev;
	Node<Node<E> prev,E element,Node<E> next>{
		this.item = element;
		this.next = next;
		this.prev = prev;
	}
}

链表为空时,插入第一个节点
插入第二个节点
插入第n个节点

ArrayList 和 LinkedList 的区别

ArrayList:数组,必须开辟连续空间,查询快,增删慢
LinkedList:双向链表,无需开辟连续空间,查询慢,增删快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值