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就应用了跳表。

      

  • 相关阅读:
    定位 frame 中的对象
    层级定位
    定位一组对象find_elements
    设置等待时间
    selenium python的使用(一)
    selenium python 安装
    Linux 用户管理(2)
    Linux 用户管理(1) (/etc/passwd)
    U盘在电脑上安装CentOS 7 系统过程详解
    vi编辑文件保存后,提示“Can't open file for writing Press ENTER or type command to continue”
  • 原文地址:https://www.cnblogs.com/xcgShare/p/13807835.html
Copyright © 2011-2022 走看看