集合、栈和队列

 

 一个算法解决一个问题,算法是无止尽的,重要的是要学会需求分析和画图,再转换成代码实现的编程思想;java

1、数组和链表算法

数组只能经过索引访问元素;编程

集合,是一个概念,只要能存放数据的容器并能动态大小,都是集合;数组

一、ArrayList本身实现,基于数组3d

 

 

 

 

 

 

 

 

 

 

 

 引用对象赋值实际是赋值的地址值,temp地址值再赋值给objs,保证始终操做的是objs对象名;指针

size是实际元素个数,保证不能访问没有元素的索引;对象

修改某个索引对应元素:blog

 

删除某索引对应元素:索引

 

 

 

 

 从删除的索引位置开始,后面全部的元素都向前移动一位,如排队;队列

清除集合:

 

 

 size=0就是逻辑清除,访问不到了,并无正在清除;

二、LinkedList实现

2.1节点类

 

 java没有正在直接操做地址值的指针,有对应地址值的引用;

 2.2 LinkedList实现

 

 

 

 

 

设置和获取已存在某位置的节点的元素值:

 

 

 

移除一个元素:

 

 

 

 只须要将链表上的前一个元素的指向下一个元素的地址值改为被移除的元素的下一个就能够;

链表的元素本就是散落存在的,没有实际的连线,就是经过引用对象名确定会存储表头结点的地址,而后从表头开始挨个访问下一个结点地址;

 

 

 

数组,删除添加时候,后面的全部元素的位置都要移动一位,多的时候效率很低,若是长度不够了,还要“搬家”,小数组搬到大数组里面,arr.length*3/2+1;查找时候,地址值连续,有索引,二分查找,速度极快;

链表,for循环遍历的话,外面for自己循环一次,里面链表本身没有索引也要循环找到当前for循环的这一步,嵌套循环,没有索引,效率很低,使用for each 迭代器遍历;增删时候只需改先后指针(引用对象节点地址值),增删很快,仍是要先遍历找到要修改的值,因此增删时候双向循环链表首尾同样很快,中间最慢;

2、栈

一、栈的实现

 

 使用队列效率更高,只须要处理尾节点;

 

队列使用链表也是同样,只须要处理尾结点,无需遍历,效率更高;

 

相关文章
相关标签/搜索