茌平网站制作,用来制作网页的软件是,建筑网格化,网站怎么写上图是最最基本的结构#xff0c;这次我采用数组实现栈。使用数组实现栈#xff0c;由于java的数组是固定长度的。所以我需要写一个增加长度的方法。然后就是迭代的问题了。使用数组实现栈的话#xff0c;我们需要写一个迭代器。不过这个迭代器非常容易实现#xff0c;只需… 上图是最最基本的结构这次我采用数组实现栈。使用数组实现栈由于java的数组是固定长度的。所以我需要写一个增加长度的方法。然后就是迭代的问题了。使用数组实现栈的话我们需要写一个迭代器。不过这个迭代器非常容易实现只需要让其implements Iterator再实现Iterator接口的方法就行。下边来看看源代码吧
import java.util.Iterator;
import java.util.Objects;public class TestStack {public static class stackItem{/*** 创建迭代器*/private class ReverseArrayIterator implements IteratorItem{private int iN;Overridepublic boolean hasNext() {return i0;}Overridepublic Item next() {return a[--i];}Overridepublic void remove() {}}private Item a[];private int N;public stack(int cap){//定义一个容量a(Item[]) new Object[cap];}public IteratorItem iterator(){ //返回一个迭代器return new ReverseArrayIterator();}public boolean isEmpty(){//判断栈是否为空return N0;}public int size(){//返回栈的元素数量return N;}public void push(Item item){//添加一个元素if(Na.length) resize(2*a.length); //如果数组已满就增加长度a[N]item;}public Item pop(){//删除最近添加的元素Item itema[--N];// 删除栈顶元素a[N]null;//避免对象游离if(N0 Na.length/4) resize(a.length/2);return item;}private void resize(int max){//增加数组长度Item[] temp(Item[]) new Objects[max];for(int i0;iN;i){temp[i]a[i];}atemp;}}public static void main(String[] args) {stackInteger integerstack new stackInteger(100);integerstack.push(123);integerstack.push(1);integerstack.push(13);integerstack.push(23);IteratorInteger iterator integerstack.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}
}再来讲讲游离的问题吧
java中的垃圾回收策略是回收所有无法被访问的对象的内存。而上边pop()方法中被弹出的元素的引用其实还是存在在数组中。但是这个元素其实已经永远无法被访问了但是java的垃圾收集器比较“机智”没办法知道这一点除非该引用被覆盖不然他没办法被访问。所以这种保存一个不需要的对象的引用就是游离。在此避免游离的方法很简单就是给他赋值为null即可这将覆盖无用的引用并使系统使用例被弹出的元素后回收它的内存。