设为首页 加入收藏

TOP

Java-数组队列(一)
2019-09-17 16:58:45 】 浏览:35
Tags:Java- 队列

Java-数组队列

1、为何要创建一个数组队列?

  数组的优点和缺点:

    优点:访问速度是所有数据结构中最快的一种。

    缺点:大小固定,如果要存储的数据个数不确定的时候?
           数组空间不够,导致越界异常发生
           如果空间太大了,数据不够,就会浪费内存空间
        插入、删除数据,的操作非常麻烦。 

  可见数组虽然有访问速度快的优点,但是数组的大小是固定了的,经常会出现空间不够或者数组越界的情况,并且删除和插入数据特别麻烦,因此就引入了数组队列的概念

 

2、数组队列的实现原理

   数组的大小是根据你要添加的数据来决定的。
   根据添加、删除数据的个数,来创建新的数组。
   数组名中存储的是数组对象在堆内存空间的首地址。
   新数组名中存储了新数组对象的首地址。
   把这个首地址给原来数组名。
   原来的数组对象,JVM(java虚拟机)的垃圾回收机制,会销毁对象,释放内存空间。

 

3、数组队列的具体实现方法

 

  数组队列:定义类,封装对数组的操作。

 

  数组队列的要求:
  在特殊情况,数组队列中只能存储某一种数据类型,如果存储其他的数据就报错。
  在特殊情况,数组中可以存储任意一种数据类型的数据
  上面两种情况的实现需要用到泛型<E>、<K、V>、<T>、...
     ①泛型不是Java中的一种数据类型。
     ②只是一个特殊的符号,可以在你不确定要存储什么类型的数据时,用这个符号代替Java中所有的数据类型。
   当你使用的时候,你可以用对应的数据类型来代替这个符号,这样
   就只能存储你指定的这一种数据类型;
   如果你不指定,则任意一种数据类型都可以存储。

 

4、自己定义一个数组队列的类

代码如下:

 

  1 package com.cyt.myarraylist0126;
  2 
  3 public class Myarraylist<e> {
  4     // 定义一个Object类型的数组
  5     private Object[] array = null;
  6     // 定义这个数组中已经添加的元素个数
  7     private int size = 0;
  8 
  9     // 通过构建函数初始化object数组
 10     public Myarraylist() {
 11         array = new Object[0];
 12     }
 13 
 14     public Myarraylist(int length) {
 15         array = new Object[length];
 16     }
 17 
 18     // 定义了一个往队列末尾添加元素的方法
 19     public void add(e stu) {
 20         if (array.length == 0 || array.length == size) {
 21             Object[] newarray = new Object[array.length + 1];
 22             for (int i = 0; i < array.length; i++) {
 23                 newarray[i] = array[i];
 24             }
 25             newarray[array.length] = stu;
 26             array = newarray;
 27             size++;
 28         } else {
 29             array[size++] = stu;
 30         }
 31     }
 32     //定义了一个通过下标往队列数组里面插入元素的方法
 33     public boolean add(int index, e stu) {
 34         if (index < 0 || index >= array.length)
 35             return false;
 36         else {
 37             Object[] newarray = new Object[array.length + 1];
 38             for (int i = 0; i < array.length; i++) {
 39                 newarray[i] = array[i];
 40             }
 41             array = newarray;
 42             for (int i = array.length - 1; i > index; i--) {
 43                 array[i] = array[i - 1];
 44             }
 45             array[index] = stu;
 46             size++;
 47             return true;
 48 
 49         }
 50 
 51     }
 52 
 53     //定义了一个往队列数组通过下标添加队列数组的方法
 54     // C++的移动(需要经常复习)
 55     public boolean add(int index, Myarraylist<e> mal) {
 56         if (index < 0 || index >= array.length)
 57             return false;
 58         else if (array.length - size >= mal.size) {
 59 
 60             for (int i = size + mal.size - 1; i >= index + mal.size; i--) {
 61                 array[i] = array[i - mal.size];
 62             }
 63             for (int i = index; i < index + mal.size; i++) {
 64                 array[i] = mal.get(i - index);
 65             }
 66             size += mal.size;
 67             return true;
 68         } else {
 69             Object[] newarray = new Object[mal.size + size];
 70             for (int i = 0; i < size; i++) {
 71                 newarray[i] = array[i];
 72             }
 73             array = newarray;
 74             for (int i = size + mal.size - 1; i >= index + mal.size; i--) {
 75                 array[i] = array[i - mal.size];
 76             }
 77             for (int i = index; i < index + mal.size; i++) {
 78                 array[i] = mal.get(i - index);
 79             }
 80             size += mal.size;
 81             return true;
 82         }
 83 
 84     }
 85 
 86     //定义了一个通过下标移除队列数组已有元素的方法
 87     public e remove(int index) {
 88         if (index < 0 || index >= size)
 89             return null;
 90         // 获取要移除的数据
 91         Object stu = array[index];
 92         int i;
 93         // 把index位置后的数据都往前移一位
 94         for (i = index + 1; i < size; i++)
 95             array[i - 1] = array[i];
 96
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇第二章 Js语法 下一篇用idea搭建SSM项目,原来这么简单

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目