资讯专栏INFORMATION COLUMN

Java知识点总结(Java容器-LinkedList)

LuDongWei / 765人阅读

摘要:知识点总结容器知识点总结容器底层实现是双向循环链表,所以增删元素效率高,查询慢。若只对单条数据插入或删除,的速度反而优于。但若是批量随机的插入删除数据,的速度大大优于因为每插入一条数据,要移动插入点及之后的所有数据。

Java知识点总结(Java容器-LinkedList)

@(Java知识点总结)[Java, Java容器, JavaCollection, JavaList]

LinkedList

底层实现是双向循环链表,所以增删元素效率高,查询慢。线程安全

ArrayList和LinkedList比较

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构

对于水机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针

对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据

这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

手写LinkedList
public  class MyLinkedList /*implements List*/ {
  private Node first;
  private Node last;
  private int size ;
  
  //新增元素
  public void add(Object obj) {
    if (first == null) {
      Node n = new Node(null,obj,null);
      first = n;
      last = n;
    }else {
      //直接往last后增加新的节点
      Node n = new Node(last, obj, null);
      last.setNext(n);
      last = n;
    }
    size++;
  }
  
  //获取元素
  public Object get(int  index) throws Exception {
    return getNode(index).getObj();
  }
  //删除元素
  public boolean remove(int index) throws Exception {
    boolean flag = false;
    Node temp = getNode(index);
    if (temp!=null) {
      temp.getPreview().setNext(temp.getNext());
      temp.getNext().setPreview(temp.getPreview());
      size--;
      flag = true;
    }
    return flag;
  }
  //指定位置加入元素
  public boolean add(int index,Object obj) throws Exception {
    boolean flag = false;
    Node temp = getNode(index);
    if (temp!=null) {
      if (index == 0) {
        Node n = new Node(null,obj,temp);
        first = n;
      }else {
        Node n = new Node(temp.getPreview(),obj,temp);
        temp.getPreview().setNext(n);
        temp.setPreview(n);
      }     
      size++;
      flag = true;
    }
    return flag;
  }
  //替换节点
  public boolean set(int index,Object obj) throws Exception{
    boolean flag = false;
    Node temp = getNode(index);
    System.out.println("获取的节点" +temp.getObj()+temp.getPreview().getObj()+temp.getNext().getObj());
    if (temp!=null) {
      
      Node n = new Node(temp.getPreview(),obj,temp.getNext());
      temp.getPreview().setNext(n);
      temp.getNext().setPreview(n);
      flag = true;
    }
    return flag;
  }
  public int size(){
    return size;
  }
  
  public void rangeCheck(int index) throws Exception {
    if (index <0 || index > size) {
      throw new Exception();
    }
  }
  
  public Node getNode(int index) throws Exception {
    rangeCheck(index);
    Node temp = null;
    //if (first != null) {  
      /*for (int i = 0; i < index; i++) {
        temp = temp.getNext();
      }*/
      /*int i = 0;
      while(temp.getNext() != null && i> 1)) {//向右移动一位,相当于/2
              temp = first;
              for (int i = 0; i < index; i++)
                  temp = temp.getNext();
              return temp;
          } else {
              temp = last;
              for (int i = size - 1; i > index; i--)
                 temp = temp.getPreview();
              return temp;
          }
  }
  public static void main(String[] args) throws Exception {
    MyLinkedList list = new MyLinkedList();
    list.add("a" );
    list.add("b" );
    list.add("c" );
    list.add("d" );
    list.add("e" );
    list.add("f" );
    System.out.println(list.size());
    list.remove(3);
    list.add(2, "新节点" );
    list.set(4, "替换");
    for (int i = 0; i            
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69522.html

相关文章

  • Java识点总结Java容器-Queue)

    摘要:知识点总结容器知识点总结容器接口与是在同一级别,都是继承了接口。另一种队列则是双端队列,支持在头尾两端插入和移除元素,主要包括。一个由链表结构组成的无界阻塞队列。是一个阻塞的线程安全的队列,底层实现也是使用链式结构。 Java知识点总结(Java容器-Queue) @(Java知识点总结)[Java, Java容器] Queue Queue接口与List、Set是在同一级别,都是继承了...

    hedzr 评论0 收藏0
  • Java集合总结【面试题+脑图】,将识点一网打尽!

    摘要:而在集合中,值仅仅是一个对象罢了该对象对本身而言是无用的。将这篇文章作为集合的总结篇,但觉得没什么好写就回答一些面试题去了,找了一会面试题又觉得不够系统。 前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集合就这么简单【源码剖析】 Ma...

    yearsj 评论0 收藏0
  • Java识点总结Java容器-List)

    摘要:知识点总结容器知识点总结容器接口为直接接口。对于而已,我们一般都是避免使用将当做首选,毕竟对于集合元素而已我们都是进行遍历,只有当程序的性能因为的频繁插入和删除而降低时,再考虑 Java知识点总结(Java容器-List) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaList] [toc] List List接口为Collection直...

    xuhong 评论0 收藏0
  • Week 2 - Java 容器 - 详细剖析 List 之 ArrayList, Vector,

    摘要:底层使用的是双向链表数据结构之前为循环链表,取消了循环。快速随机访问就是通过元素的序号快速获取元素对象对应于方法。而接口就是用来标识该类支持快速随机访问。仅仅是起标识作用。,中文名为双端队列。不同的是,是线程安全的,内部使用了进行同步。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的需要重点记录的知识点。...

    MartinDai 评论0 收藏0
  • Collection集合识点总结

    摘要:和的区别是非线程安全的,效率高是基于线程安全的,效率低底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。基本上都是以为基础。 什么是集合 Java是一门面向对象的语言. 为了方便操作多个对象,那么我们就得把这多个对象存储起来 想要存储多个对象(变量),我们就需要一个容器 集合就是一个放数据的容器(集合类存放的都是对象的引用,而非对象本身) ...

    I_Am 评论0 收藏0

发表评论

0条评论

LuDongWei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<