LinkedList

一、LinkedList介绍
LinkedList实现了链表的数据结构,链式结构使得LinkedList相对于顺序结构的ArrayList来说,在列表中插入数据或删除数据时效率更高。它实现了List接口并继承于AbstractSequentialList。构造方法如下:

LinkedList();//创建默认空链表
LinkedList(Collection c);//创建链表,将现有集合c放入链表
//由于都是实现List接口,所以和ArrayList的很多方法都是一致,其实现虽然完全不同,不过方法的调用和含义是一致的,所以这里我们就介绍几个ArrayList所不同的方法:
void addFirst(Object obj);//在头部添加数据
void addLast(Object obj);//在尾部添加数据
void add(int index,Object obj);//指定位置添加数据
Object getFirst();//从头部读取数据
Object getLast;//从尾部读取数据
Object removeFirst();//从头部移除数据
Object removeLast();//从尾部移除数据

二、常用方法举例

package com.stu;
import java.util.LinkedList;
import java.util.Vector;
import com.pojo.Student;

public class LinkedListStu{
	public static void main(String []args){
		LinkedList LinkedList=new LinkedList();

		Student sttu1=new Student();
		stu1.setName("张三1");
		LinkedList.add(stu1);

		Student stu2=new Student();
        stu2.setName("张三2");
        
        Student stu3=new Student();
        stu3.setName("张三3");
        
        linkedList.add(stu3);//默认添加到末尾

		System.out.println("大小:"+linkedList.size());
        System.out.println("是否为空:"+linkedList.isEmpty());
        System.out.println("是否包含:"+linkedList.contains(stu2));

		System.out.println(linkedList.get(2));
        
        //linkedList比较特有的方法
        linkedList.add(0, stu2);//指定位置添加
        linkedList.removeFirst();
        linkedList.removeLast();
        linkedList.addFirst(stu1);
        linkedList.addLast(stu3);
        
         for(int i=0;i<linkedList.size();i++){
            Object object=linkedList.get(i);
            if(object instanceof Student){
                Student stu=(Student)object;
                System.out.println(stu.getName());
            }
        }
	}
}

三、ArrayList和LinkedList的区别
ArrayList和LinkedList的区别实际上就是数据结构中顺序表和链表直接的区别。

顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,ArrayList的存储空间需要预先分配,并在运行中可以动态在扩充,
它的优点是:
节省空间,不用为表示节点间的逻辑关系而增加额外的存储开销。
随机访问速度高,顺序表具有按元素序号随机访问。
缺点:
在顺序表中做插入、删除操作时,平均移动表中的一半元素,因此对较大的顺序表效率低。
需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。

**在链表中逻辑上相邻的数据元素,物理存储位置不一定相邻,它使用指针实现元素之间的逻辑关系。并且,链表的存储空间是动态分配的。**LinkedList采用双向链表的方式实现,
它的最大特点是:
插入、删除运算方便。
不需要预先分布连续的存储空间。
缺点:
要占用额外的存储空间存储元素之间的关系,存储密度降低。
链表不是一种随机存储结构,不能随机存取元素。
可见ArrayList和LinkedList的优缺点是互补的,要看实际的应用需要来决定使用哪一种存储方式,例如,要经常查找线性表中的第i个元素,对于顺序表可以直接计算出a(i)的的地址,不用去查找,其时间复杂度为0(1).而链表必须从链表头开始,依次向后查找,平均需要0(n)的时间。所以,如果经常做的运算是按序号访问数据元素,显然顺表优于链表。反之,如果经常需要增删数据的,那么在顺序表中平均移动表中一半的元素,当数据元素的信息量较大而且表比较长时,而在链表中作插入、删除,虽然要找插入位置,但是不需要移动数据,所以LinkList又比ArrayList效率要高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值