zoukankan      html  css  js  c++  java
  • 数组、链表、跳表得基本实现和特性

    感谢极客7天掌握算法面试必考知识点这门课程

    一、数组

      Java中对基于数组的ArrayList进行增加操作的时候是如何实现的呢?

    首先Array增加和删除数组的时候需要进行元素的移动,比如:ABCEFG组成的数组中加入D 首先要下移EFG然后将D插入原来E的位置 。同理删除时候ABCDE要删除 也是先移出C然后然后DE的Index向上移动一位。

      我们来看一下JavaArrayList中新增数组进行了哪些操作:ArrayList源码

    首先看add方法(在list最后加入):

     这个方法做了如下操作:

      1、对操作计数

      2、判断ArryList的长度是否已经等于数组的长度了 如果已经等于说明不够用了需要增加ArrayList的长度

      3、数组长度+1,在数组中最后位置加上e元素

    再看index位置插入元素的add方法:

    这个方法做了如下操作:

      1、检查index位置是否数组越界

      2、对操作计数

      3、判断ArryList的长度是否已经等于数组的长度了 如果已经等于说明不够用了需要增加ArrayList的长度

      4、判断插入数组位置不是最后一位 则:进行数组拷贝,该方法:1,2参数标识原数组以及拷贝起点位置,3,4表示拷贝到的新数组以及起点位置,5 表示拷贝长度 

      4、在数组index位置加上e元素

      5、数组长度+1

    补充:

     这个方法做了如下操作:

      如果入参>当前数组长度 那么:

      1、new一个新数组 长度为原数组的2倍并且与入参比较如果还不够就再增加

      2、把老数组拷贝进去

    二、链表

      

     这是一个链表的结构:包含 Value:每一个Value都需要一个node作为元素对象

                       Next :指向下一个元素

                  Head:头

                  Tail:尾

      如果只有一个next指针 那么这个链表是单链表,如果拥有先前指针prev或者是previous就是双向链表 ,最后一个元素 指向了空 如果指向了Head 那么就是一个循环链表

      在Java中链表以LinkedList为例 :

    通过实现我们可以看到:它包含了previous 说明是一个双向链表,同时包含next first即为head指针 last即为tail指针 ,Entry即为node元素。

    链表添加元素是如何实现的呢:

    在java的LinkedList中添加即为添加到最后:

    三、跳表 skipList

      跳表本身是基于链表的,跳表的使用必须基于有序链表,跳表对标的是平衡树和二分查找。Redis就应用了跳表。

      

  • 相关阅读:
    使用java Graphics 绘图工具生成顺丰快递电子面单
    NPM使用命令总结
    MYSQL主从库同步配置过程
    Redis的事务功能详解
    MapReduce 原理与 Python 实践
    Django权限机制的实现
    Python调用外部程序——os.system()和subprocess.call
    oracle11g安装教程(注意事项及图文教程)
    顶级的JavaScript框架、库、工具及其使用
    经典CSS坑:如何完美实现垂直水平居中?
  • 原文地址:https://www.cnblogs.com/xcgShare/p/13807835.html
Copyright © 2011-2022 走看看