前言
数组是JAVA中最常见的数据结构之一,虽然其优点很多,但是数组的长度在一开始就确定好了,不可以根据需要的长度而增加或减短。所以我们需要一种可以增改长度的数据结构,队列就是其中之一。本文使用数组来模拟队列,同时加上了泛型的处理。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组的简单认知
数组是一个容器,可以存储同一类型的N个数据。
数组是一种数据结构,是数据结构中访问速度最快的一种。
数组是直接通过下标进行定位的。
数组是属于引用数据类型(数组名中存储的是内存首地址)。
数组本身只有length属性(length获取数组中能存储的数据个数)
但是有从Object父类继承的属性和方法。
数组在内存中的存储是一个连续的存储空间。
二、数组队列的简单认知
只是利用数组这个数据结构来实现处理多个数据的类。
数组在定义的时候要定义类型和大小;定义完后还不能修改(不能动态改变大小,或者改变存储类型)。
存储数据的个数是会根据实际情况进行变化的,但是数字无法改变。
不确定要存储的数据个数;
数组定义大了,数据少了,就会浪费内存。
数组定义小了,数据多了,就会越界,存储不下。
利用的是数组名中存储的是数组对象在堆内存中的首地址
使用泛型后的数组队列可以实现的功能:
队列中可以存储任何数据类型。
队列中第n个数据类型要求和队列第一个数据类型相同。
三、JAVA的代码实现
首先定义一个Mylist接口,定义增删改查取等功能,其中Mylist接口名后加上的泛型符号,代码如下:
public interface Mylist<E>{
/**
* 添加一个元素
*/
public void add(E element);
/**
* 获取数组长度
*/
public int getCount();
/**
* 修改元素
*/
public void upData(int index, Object newElement);
/**
* 取出元素
*/
public Object getElement(int index);
/**
* 删除元素
*/
public void delete(int index);
}
接着利用List1这个类继承Mylist接口,并对其抽象方法进行重写,在这里最重要的注意点是将所有的数组及需要和数组内元素交换的变量定义为Object类,这样的话就可以实现根据第一个存入队列的数据类型决定后面存入的数据类型了。代码如下:
public class List1 implements Mylist{
private int count; // 保存数组的长度
private Object[] data; //创建一个数组
@Override
public void add(Object element) {
// TODO Auto-generated method stub
// 创建一个临时数组
Object[] temp = new Object[count + 1];
// 将原数组内容复制到临时数组中
for (int i = 0; i < count; i++) {
temp[i] = data[i];
}
data = temp;
//添加新的元素
data[count] = element;
//让数组长度加一
count++;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return count;
}
@Override
public void upData(int index, Object newElement) {
// TODO Auto-generated method stub
data[index] = newElement;
}
@Override
public Object getElement(int index) {
// TODO Auto-generated method stub
return data[index];
}
@Override
public void delete(int index) {
// TODO Auto-generated method stub
//创建一个临时数组
Object temp[] = new Object[count-1];
//将删除项前的元素复制到临时数组中
for(int i = 0; i < index-1; i++){
temp[i] = data[i];
}
//将删除项后的元素复制到临时数组中
for(int i = index-1; i < count-1; i++){
temp[i] = data[i+1];
}
data = temp;
//数组长度减一
count--;
}
}
最后使用一个Main类来检验一下数组队列的各个功能。检验时我试过整形和字符型数据类型,以下代码存入的是字符型,代码如下:
public class Main {
public static void main(String[] args) {
System.out.println("实例化一个列表");
List1 List = new List1();
System.out.println("*******添加项************");
List.add("a");
List.add("b");
List.add("c");
List.add("d");
for (int i = 0; i < List.getCount(); i++) {
System.out.println("List的第" + i + "项为:" + List.getElement(i));
}
System.out.println("列表长度为" + List.getCount());
System.out.println("**********删除项***************");
List.delete(2);
for (int i = 0; i < List.getCount(); i++) {
System.out.println("List的第" + i + "项为:" + List.getElement(i));
}
System.out.println("列表长度为" + List.getCount());
System.out.println("***********更新项*************");
List.upData(2,"e");
for (int i = 0; i < List.getCount(); i++) {
System.out.println("List的第" + i + "项为:" + List.getElement(i));
}
System.out.println("列表长度为" + List.getCount());
}
}
代码输出结果如下:
总结
收获:
1.学会了泛型的使用。
2.学会了编写和使用数组队列。
不足:
1.对泛型的理解还不够深刻透彻,仅仅会简单运用。