菜鸟的学习之路(10) — LinkedList类

一.认识LinkedList类:

实现的接口:Serializable,Cloneable,Iterable,Collection,DequeListQueue

父类:AbstractSequentialList

LinkedList的底层是用双链表的形式实现。

*双向链表简要理解:

* 运行效果:

*图解:

LinkedList的底层使用双向链表实现(LinkedList的双向链表最好看源码),所以相对于ArrayList有很多优点,也有缺点。

优点:当执行插入或删除操作时改变的是next和previous的引用,而ArrayList是一个数组,当进行添加删除操作时需要操作节点以后得元素进行移动或前进(例如100个元素,当删除第一个元素时后面的99个都要向前移动一个位置)。所以当执行插入或删除操作时使用linkedList效率会大大提升。

缺点:当进行搜索操作时,因为LinkedList是双向链表,元素不是连续排放,当进行搜索是需要一个一个的进行查找,所以效率不高,而ArrayList的底层是数组实现,所以元素是连续存放的,当查找时通过索引就能查找到

二.简单的使用:

我只演示部分方法的使用:

public class Test {
          public static void main(String args[]){
        	   LinkedList list = new LinkedList();
        	   list.add("A");
        	   list.add("C");
        	   list.add("D");
        	   System.out.println("list中有的元素:"+list);
        	   list.add(1,"B");       //通过指定位置插入元素
        	   System.out.println("list中有的元素:"+list);
        	   list.addFirst("a");      //插入列表开头
        	   list.addLast("d");       //插入列表结尾
        	   System.out.println("list中有的元素:"+list);
               System.out.println("第一个元素:"+list.getFirst()+".最后一个元素:"+list.getLast());
               System.out.println("返回第二个元素:"+list.get(1));
        	   System.out.println("此时列表中的元素个数:"+list.size());
        	   System.out.println("删除第一个结点:"+list.removeFirst());
        	   System.out.println("删除最后一个节点:"+list.removeLast());
        	   System.out.println("list中有的元素:"+list);       	   
          }
}

 

打印:

当向LinkedList中添加对象时,会在LikedList内部生成一个Entry对象,Entry的部分结构

Entry

{

Entry previous;//前趋

Object element;//这个是我们向LinkedList中添加的元素。

Entry next;//后趋

}

再把创建出的Entry对象添加链表中,LinkedList维护的是一个个Entry对象。

Entry类是LinkedList类中的内部类。详细的代码在源代码中都有。建议大家去看一看。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值