JAVA学习心得-----关于数组以及运用数组自定义队列

数组
1.储存规定长度并且需要存入数据为相同类型
2.格式为 数据类型[] 数组名 = new 数据类型[]{内容};
例如: 整形数组
int[] S = new int[]{1,2,3};
字符串数组
String[] S = new String[]{“a”,“b”,“c”};

可以不填入内容,在[]写入数字n,那么便创建了一个长度为n的内容是"空"的数列。
3.数组具有连续性,无法直接用本体数组来实现增添删除操作。
4.数组里的内容可以重复,无影响。
队列
格式:Queue queue = new LinkedList<类型>();
许多地方都会说队列先进先出,无长度限制,这实际是JAVA中原Queue里的方法造成的结果,我们也能够自己写入方法,来模拟、改变原JAVA中队列的规则。
自定义队列思路
根本:运用数组来实现规则。
这里的示范,我只让队列存入String类型的数据,数组用String类型来定义。以下图片中的数字代表下标,a表示数据。

1.首先需要一个存有运算规则的类,新建一个MyQueue.java

public class MyQueue {
	//首先创建一个用来存数据的数组
	private String[] text = new String[0];
	//下面编写运算方法
	}

即可。

2.(写入MyQueue类中)实现添加的功能,运用两个数组进行操作,创建一个比上一个数组长度多1的新数组,将原来数组拥有的数据复制过来,并加入新的数据,最后新数组覆盖掉原数组即可。这里模拟队列,只添加在最后一位。

java 创建数组长度未知 java创建长度为n的数组_队列

//添加(到数组最后)
    public void add(String a) {
    	//创建一个新数组,比第一个数组长度多1
    	String[] Ntext = new String[text.length+1];
    	
    	//将原数组的数据复制给新数组
    	for(int i=0;i<text.length;i++) {
    		Ntext[i] = text[i];
    	}
    	
    	//将加入的数据放到新数组的最后一位
    	Ntext[Ntext.length-1] = a;
    	//将地址指向新的数组,可以理解为把新数组的数据赋值给原来的数组
    	text = Ntext;

3.实现获取数据功能。

//从队列中取出一个
    public String get(int index) {
    	//运用下标来返回数组中的值
    	String a = text[index];
    	return a;
    }

4.实现返回长度的功能。

//队列的长度
    public int size() {
    	return text.length;
    }

5.实现删除功能。模拟队列删除最后一个,只需复制原数组的最后一个数据之前的数据,给新数组即可。

java 创建数组长度未知 java创建长度为n的数组_数据_02

//去除最后一个
    public void cutlist(){
        //当队列长度为0时
    	if(text.length == 0) {
    		System.out.println("长度为0,无法删除");
    	}
    	//创建一个新数组,比第一个数组长度少1
    	else {
    	String[] Ntext = new String[text.length-1];
    	
    	//将原数组的数据长度-1的数据,复制给新数组
    	for(int i=0;i<text.length-1;i++) {
    		Ntext[i] = text[i];
    	}
    	
    	//将地址指向新的数组,可以理解为把新数组的数据赋值给原来的数组
    	text = Ntext;
    	}	
    }

6.实现插入功能,在添加的基础上改进,实现把输入的数据插入到下标位置。思路是复制下标前原数组的内容,在下标出输入a数据,然后复制后一段的内容。需要注意下标的更换。

java 创建数组长度未知 java创建长度为n的数组_数组_03

//插入到下标index之后
    public void insert(String a,int index) {
    	
    	//创建一个新数组,比第一个数组长度多1
    	String[] Ntext = new String[text.length+1];
    	    
    	//越界判定
    	if(index+1 > text.length||index < 0) {
    	    System.out.println("超出长度,撤销替换指令!");
    	}
    	    		
    	else {
    	    //将输入数字下标前的数据复制给新数组
    	    for(int i=0;i<index+1;i++) {
    	        Ntext[i] = text[i];
    	    }
    	    	
    	    //在下标处插入数据a
    	    Ntext[index+1] = a;
    	    	
    	    //将输入数字下标后的数据复制给新数组
    	    for(int j=index+2;j<text.length+1;j++) {
    	    	 Ntext[j] = text[j-1];
    	    }
    	    	
    	    //将地址指向新的数组,可以理解为把新数组的数据赋值给原来的数组
    	    text = Ntext;
         }
		
    }

7.实现替换功能,输入(数据,下标),替换掉下标处的数据,分别复制下标前与下标后的数据给新数组。我这里是产生比原数组长度多1的新数组,所以会产生1个空位,只需再添加删除里面的逻辑,把最后一个空值删掉即可。

java 创建数组长度未知 java创建长度为n的数组_java 创建数组长度未知_04

//替换下标index处的元素
    public void replace(String a,int index) {
    	//创建一个新数组,比第一个数组长度多1
    	String[] Ntext = new String[text.length+1];
    
    	    //越界判定
    		if(index > text.length||index < 0) {
    			System.out.println("超出长度,撤销替换指令!");
    		}
    		
    		else {
    	        //将输入数字下标前的数据复制给新数组
    	        for(int i=0;i<index;i++) {
    		        Ntext[i] = text[i];
    	        }
    	
    	        //在下标处插入数据a
    	        Ntext[index] = a;
    	
    	        //将输入数字下标后的数据复制给新数组
    	        for(int j=index+1;j<text.length;j++) {
    		        Ntext[j] = text[j];
    	        }
    	
    	        //将地址指向新的数组,可以理解为把新数组的数据赋值给原来的数组
    	        text = Ntext;
    		}
    }

8.实现删除指定位置的功能,输入下标,删除掉指定位置的数据。复制下标前与下标后的数据给新数组即可,需要注意新数组中,下标的移动。下图表示,删除的是下标2的数据。

java 创建数组长度未知 java创建长度为n的数组_数据_05

//移除指定位置
    public void move(int index) {
    	//创建与原长度相等的新数组
    	String[] Ntext = new String[text.length];
    	
    	//将需要去掉的值之前的数给新数组
    	if(index!=text.length) {
    		//越界判定
    		if(index>text.length) {
        		System.out.println("错误!删除指令撤销!");
        	}
    		//
    		else {
    	        for(int i=0;i<index;i++) {
    		        Ntext[i] = text[i];
    	        }
    	        for(int j=index+1;j<text.length;j++) {
    	            Ntext[j-1] = text[j];
    	        }
    	        text = Ntext;
    		}
        }
    	
    	//当需要删除的数是最后一位时
        else {
        	//将原数组的数据长度-1的数据,复制给新数组
        	for(int i=0;i<text.length-1;i++) {
        		Ntext[i] = text[i];
        	}
        	text = Ntext;
//        	将地址指向新的数组,可以理解为把新数组的数据赋值给原来的数组

    	}
  	
     }

就先实现这几个功能,接下来加入主函数验证一下是否成功。

//主函数
    public static void main(String args[]) {
    	MyQueue tt = new MyQueue();
    	//测试添加
    	tt.add("green");
        tt.add("blue");
        tt.add("你好");
        tt.add("飞机");

    	//添加后
    	System.out.println("队列中数据有["+tt.get(0)+","+tt.get(1)+","+tt.get(2)+","+tt.get(3)+"]");
    	tt.insert("hello",1);
    	//测试插入
    	System.out.println("-------------插入后----------");
    	System.out.println("队列中数据有["+tt.get(0)+","+tt.get(1)+","+tt.get(2)+","+tt.get(3)+","+tt.get(4)+"]");
    	
    	//测试替换
    	tt.replace("红色",0);
    	System.out.println("-------------替换后----------");
    	System.out.println("队列中数据有["+tt.get(0)+","+tt.get(1)+","+tt.get(2)+","+tt.get(3)+","+tt.get(4)+"]");
    	
    	//测试删除
    	tt.move(2);
    	System.out.println("-------------删除后----------");
    	System.out.println("队列中数据有["+tt.get(0)+","+tt.get(1)+","+tt.get(2)+","+tt.get(3)+","+tt.get(4)+"]");
    	
    }

结果输出:

java 创建数组长度未知 java创建长度为n的数组_java 创建数组长度未知_06