1.数组的优点和缺点
数组的优点:1.存取方便 2.查找速度
数组的缺点:1.长度固定 2.存储的数据类型是固定的。
2.数组队列的实现思路
1).对象名中存储的是什么内容?
对象名中存储的是地址。
int [] array = new int[0]; array = new int[1];
Java中有GC(垃圾回收机制),自动销毁没有使用的对象,释放内存空间。就相当于C++中的析构函数
1.借助于对象名中存储的地址,每一次创建一个新的数组,是原始数组的长度加1或者长度减1.
2.原始数组中存储的数据,存入到新数组中,然后再去添加新的元素或者不需要添加
3.数组队列的实现步骤
1).定义一个接口,在接口中定义抽象方法。
2).定义一个类,实现接口,重写接口中的抽象方法。
3).在类中定义一个原始数组和数组的元素总数属性。
4.实现添加元素的方法
a.新建一个数组,数组的长度是原始数组的长度加1。
b.将原始数组中的内容复制到新数组中。
c.将要添加的元素添加到新数组的最后一位。
d.将新数组名中存储的地址赋给原始数组名。
5.实现删除元素的方法 和第四步是类似的。
6.获取元素的总数呢? 添加元素的时候,元素总数属性加1;删除元素的时候,元素总数属性减1;返回元素总数属性值 7.查找对应的元素方法
a.判断索引是否在下标允许的范围之内。
b.数组[下标]的方式直接获取元素。
4.Java的泛型 泛型 表示符号是E E可以表示Java中的任意一种数据类型。
package 数组队列; /** * 数组队列的测试demo类 * * @author xxj * */ public class ArrayListDemo { public static void main(String[] args) { // 实例化一个数组队列对象。 MyArrayList mal = new MyArrayListImpl(); mal.add("字符串---");// 向队列中添加元素 for (int i = 0; i < 5; i++) { mal.add(i);//调用添加元素的方法 } mal.add("结束"); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println(); //调用删除的方法 mal.remove(5); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println(); //将指定的元素插入此列表中的指定位置。 mal.add(2,"add方法插入到下标为2的位置" ); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println(); //移除此列表中首次出现的指定元素(如果存在)。 mal.remove("结束"); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println(); //用指定的元素替代此列表中指定位置上的元素。 mal.set(2, "element"); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println(); //返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 System.out.println("1第一次出现的索引"+mal.indexOf(1)); //返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。 System.out.println("1最后一次出现的索引"+mal.indexOf(1)); //如果此列表中没有元素,则返回 true System.out.println(mal.isEmpty()); //移除此列表中的所有元素 mal.clear(); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } System.out.println("移除此列表中的所有元素后,是否为空: "+mal.isEmpty()); } }
package 数组队列; /** * 数组队列接口 * @author xxj * */ public interface MyArrayList<E> { public void add(E e);//添加元素的方法 public boolean remove(int index);//移除元素的方法 public int size();//获取数组队列的元素总数 public E get(int index);//获取指定索引位置的元素 //将指定的元素插入此列表中的指定位置。 public void add(int index, E element); //移除此列表中的所有元素 public void clear(); //返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 public int indexOf(Object o); //如果此列表中没有元素,则返回 true public boolean isEmpty(); // 返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。 public int lastIndexOf(Object o); //移除此列表中首次出现的指定元素(如果存在)。 public boolean remove(Object o); //用指定的元素替代此列表中指定位置上的元素。 public E set(int index, E element); }
package 数组队列; /** * 自定义的数组队列实现类,该类要实现MyArrayList接口 * * @author xxj * */ public class MyArrayListImpl<E> implements MyArrayList<E> { // 声明一个原始数组对象,长度是0 private Object[] array; // 声明一个存储数组中元素的总数变量 private int size = 0; /** * 构造方法 */ public MyArrayListImpl() { array = new Object[0]; } /** * 构造方法 */ public MyArrayListImpl(int size) { array = new Object[size]; } /** * 向队列的末尾添加元素 */ public void add(E e) { // 定义一个新的数组,该数组的长度是原始数组的长度加1 Object newarray[] = new Object[size + 1]; // 将原始数组中的内容复制到newarray for (int i = 0; i < size; i++) { // 复制操作 newarray[i] = array[i]; } // 将新元素添加newarray数组的最后一个位置 newarray[size] = e; // 统计元素个数的计数器要加1 size++; // 交换地址 array = newarray; } /** * 从队列中移除指定索引位置的元素 */ public boolean remove(int index) { // 定义一个新的数组,该数组的长度是原始数组的长度减1 Object newarray[] = new Object[size - 1]; // 判断index索引是否在范围之内 if (index >= 0 && index < size){ // 将原始数组中的内容复制到newarray for(int i=0;i<index;i++){ // 复制操作 newarray[i] = array[i]; } for(int i=index+1;i<size;i++){ // 复制操作 newarray[i-1] = array[i]; } }else{ return false; } // 统计元素个数的计数器要减1 size--; // 交换地址 array = newarray; return true; } /** * 获取数组队列中的元素总数 */ public int size() { return size; } /** * 获取数组队列中指定索引位置的元素 */ public E get(int index) { // 判断index索引是否在范围之内 if (index >= 0 && index < size){ return (E)array[index]; } return null; } /** * 将指定的元素插入此列表中的指定位置。 */ public void add(int index, E element){ // 定义一个新的数组,该数组的长度是原始数组的长度加1 Object newarray[] = new Object[size+1]; if (index >= 0 && index < size){ // 将原始数组中的内容复制到newarray for(int i=0;i<index;i++){ // 复制操作 newarray[i] = array[i]; } newarray[index] = element; for(int i=index+1;i<size+1;i++){ // 复制操作 newarray[i] = array[i-1]; } } // 统计元素个数的计数器要加1 size++; // 交换地址 array = newarray; } /** * 移除此列表中的所有元素 */ public void clear(){ // 定义一个新的数组,该数组的长度是0 Object newarray[] = new Object[0]; size=0; // 交换地址 array = newarray; } /** * 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 */ public int indexOf(Object o){ //遍历数组,查找此列表中首次出现的指定元素的位置 for(int i=0;i<size;i++){ //判断首次出现的指定元素的位置 if(array[i]==o){ return i; } } return -1; } /** * 如果此列表中没有元素,则返回 true */ public boolean isEmpty(){ for(int i=0;i<size;i++){ //判断数组中是否有元素不为空 if(array[i]!=null){ return false; } } return true ; } /** * 返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。 */ public int lastIndexOf(Object o){ //遍历数组,从后往前查找第一次出现的指定元素 for(int i=size-1;i>0;i--){ //判断从后往前查找第一次出现的指定元素的位置 if(array[i]==o){ return i;//返回索引 } } return -1; } /** * 移除此列表中首次出现的指定元素(如果存在)。 */ public boolean remove(Object o){ // 定义一个新的数组,该数组的长度是原始数组的长度减1 Object newarray[] = new Object[size - 1]; for(int j=0;j<size;j++){ if(array[j]==o){ // 将原始数组中的内容复制到newarray for(int i=0;i<j;i++){ // 复制操作 newarray[i] = array[i]; } for(int i=j+1;i<size;i++){ // 复制操作 newarray[i-1] = array[i]; } // 统计元素个数的计数器要减1 size--; // 交换地址 array = newarray; return true; } } return false; } /** * 用指定的元素替代此列表中指定位置上的元素。 */ public E set(int index, E element){ //用指定的元素替代此列表中指定位置上的元素 array[index]=element; return element; } }
相关推荐
今天用VBS脚本写了几个程序,用到了字典(Dictionary)、动态数组(ArrayList)、队列(Queue)和堆栈(Stack)。现在写篇Blog总结一下 ,需要的朋友可以参考下
主要给大家介绍了JavaScript数据结构之数组、栈与队列的相关资料,文中对数组、栈与队列的使用方法进行了详细的总结,相信对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
本文实例总结了php常用经典函数。分享给大家供大家参考,具体如下: 数组函数 数组操作 range(start,end) 创建一个数组,值从start开始,一直到end结束 如果range里面的参数是数字,那么他直接按照数字大小的顺序...
队列是一个有序列表,可以用数组或是链表来实现,遵循先进先出的原则 数组实现队列 图解 思考 1、front、real的初始值为-1,最大值为MaxSize 2、对列空的条件:rear = front 3、队列满的条件:real
Java版本算法练习+笔记总结 按照数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构进行系统的练习 每道题都有标号和题目链接.zip
ArrayBlockingQueue是由数组支持的有界阻塞队列,次队列按照FIFO(先进先出)原则,当队列已经填满,在去增加则会导致阻塞,这种阻塞类似线程阻塞。 ArrayBlockingQueue提供的增加和取出方法总结 使用...
完整的标准的可实现的在编译器上完整数据结构代码,包括线性表,数组,队列,栈,图和树等数据结构算法。。。。。
对于那些希望模仿各种队列实现(FIFO、LIFO)的程序员来说,这些函数可以提供便利。顾名思义,从这些函数的函数名(push、pop、shift和unshift)就清楚地反映出其作用。 PS:传统的队列是一种数据结构,删除元素与...
Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...
排序算法总结 面试编程题... 剑指Offer编程题目录 二维数组中的查找: 替换空格: 从尾到头打印链表: 重建二叉树: 用两个栈来实现队列: 旋转数组的最小数字: 斐波那契数列: 跳台阶: 跳台阶2: 矩形覆盖: 二进制中1的...
消息队列 协调器 ID生成方式 一致性hash 限流 微服务 微服务介绍 服务发现 API网关 服务容错保护 服务配置中心 算法 数组-快速排序-第k大个数 数组-对撞指针-最大蓄水 数组-滑动窗口-最小连续子数组 数组-归并排序-...
思维导图是对一个阶段学习的总结和知识的归纳,需要建立知识点之间的联系,将所学的知识可以根据较大区分度的地方进行划分,具有较大共通性的地方进行汇总。 串、栈、队列的区分度在于数据的运算和逻辑结构,而他们...
表、栈和队列3.1 抽象数据类型(ADT)3.2 表ADT3.2.1 表的简单数组实现3.2.2 链表3.2.3 程序设计细节3.2.4 常见的错误3.2.5 双链表3.2.6 循环...ADT3.4.1 队列模型3.4.2 队列的数组实现3.4.3 队列的应用总结练习第4章...
内容涵盖:第一章绪论、算法衡量指标、第二章线性表、顺序表、链表、第三章栈和队、栈、栈的应用举例、队列、循环队列、第四章串、串的模式匹配、第五章数组和广义表、稀疏矩阵的压缩存储方法:、广义表、第六章树和...
前面调侃了几句,回归正题,这里要总结7个在JavaScript中删除Array元素的方法,分别是利用length属性、delete关键字、pop()栈方法、shift()队列方法、splice()操作方法、forEach()或filter()迭代方法和prototype原型...
校招编程题目总结,分了树、数组、栈队列、排序、字符串、动态规划、链表和其他8个部分
def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float. (2)double*(*gh)[10]; gh是一个指针,它指向一个一维数组,数组元素都是double*. (3)double(*f[10])(); f是一个数组,f有10个元素,元素都是...
04-动态数组.pdf 05-链表.pdf 06-栈.pdf 07-队列.pdf 08-二叉树.pdf 09-二又搜索树.pdf 10-平衡二又搜索树.pdf 11-AVL树.pdf 12-B树.pdf 园13-红黑树.pdf 14-集合.pdf 15-映射.pdf 16-哈希表.pdf 圆17-二叉堆.pdf 18...