如何使用Arrays.copyOf()对数组扩容,使用数组实现栈

来源:互联网 发布:三国演义武力排行知乎 编辑:程序博客网 时间:2024/06/03 22:26

栈是一种容器,对栈的操作有pop()出栈,就是从栈中取出栈顶元素,push()入栈,将元素压入栈顶,peek(),返回栈顶元素(但是不出栈)

这里使用数组实现,初始时刻,默认栈的大小是2,每次入栈之前先判断元素增加一个之后,栈的容量是否够用,如果不够用就用Arrays.copyOf();进行扩容;

对于Array.copy(E[] e,newLength);

其第一个形参指的是需要扩容的数组,后面是扩容后的大小,其内部实现其实是使用了System.arrayCopy();在内部重新创建一个长度为newLength 类型是E 的数组

并返回该数组的引用;

后面附上测试代码:

package com;import java.util.Arrays;//如何使用数组实现栈class MyStack<E>{ private E[] stack;private int size;public int getSize() {return size;}public void setSize(int size) {this.size = size;}//构造函数public MyStack(){      //初始时候的数组的容量是2   stack = (E[]) new Object[2];   } //判断栈是否为空public boolean isEmpty(){   return size==0;} //返回栈顶元素 但是不出栈 public  E peek(){if(size == 0){ return null;}else{   System.out.println("栈顶元素---》"+stack[size-1]); return   stack[size-1];       }}//出栈  返回栈顶元素并且将size-1;并且将栈顶元素赋值为nullpublic  E pop(){     E  value = peek();     if(value!=null)     {      stack [size-1] =null;      size -=1;     }     System.out.println("正在出栈"+value);     return value;}//入栈 并返回入栈的值public E push(E e){   ensureSize(size+1);   //先判断 如果增加一个值之后 数组的大小是不是够用;   stack [size++] = e;   //把新的值放到最后,并且把元素的数量size 加一  ; 表示   System.out.println("正在入栈--》"+e);   return e;   }//判断容器的大小 如果不够就要扩容 private void ensureSize(int size) {   int length = stack.length;    //如果元素的数量超过数组的容量,就需要对栈进行扩容   if(size>length)   {     int newLength = 10+length;     stack = Arrays.copyOf(stack, newLength); //这里的数组扩充用Arrays.Copy() 另外一个System.arrayCopy();     System.out.println("正在扩充数组的容量----->"+stack.length);   } }}public class Main2{ public  static void main(String [] args) {  MyStack <String>  stack = new MyStack<String>();    System.out.println(stack.peek());        stack.push("hello");    stack.push("你好");        stack.push("我也好");    stack.peek();    stack.pop();    stack.pop();    stack.pop();    stack.pop(); }}


2 0
原创粉丝点击