标签:实现 平衡 并且 source 极客 知识点 检查 plist ast
感谢极客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中添加即为添加到最后:
跳表本身是基于链表的,跳表的使用必须基于有序链表,跳表对标的是平衡树和二分查找。Redis就应用了跳表。
标签:实现 平衡 并且 source 极客 知识点 检查 plist ast
原文地址:https://www.cnblogs.com/xcgShare/p/13807835.html