如何使用Arrays.copyOf()对数组扩容,使用数组实现栈
栈是一种容器,对栈的操作有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;并且将栈顶元素赋值为null public 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(); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: element-ui表单验证
- 下一篇: tp中的M,D,C,A,I,S方法