日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

复习---使用基础语法实现栈及迭代

發布時間:2025/3/11 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复习---使用基础语法实现栈及迭代 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


上圖是最最基本的結構,這次我采用數組實現棧。使用數組實現棧,由于java的數組是固定長度的。所以我需要寫一個增加長度的方法。然后就是迭代的問題了。使用數組實現棧的話,我們需要寫一個迭代器。不過這個迭代器非常容易實現,只需要讓其implements Iterator再實現Iterator接口的方法就行。下邊來看看源代碼吧

import java.util.Iterator; import java.util.Objects;public class TestStack {public static class stack<Item>{/*** 創建迭代器*/private class ReverseArrayIterator implements Iterator<Item>{private int i=N;@Overridepublic boolean hasNext() {return i>0;}@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 Iterator<Item> iterator(){ //返回一個迭代器return new ReverseArrayIterator();}public boolean isEmpty(){//判斷棧是否為空return N==0;}public int size(){//返回棧的元素數量return N;}public void push(Item item){//添加一個元素if(N==a.length) resize(2*a.length); //如果數組已滿,就增加長度a[N++]=item;}public Item pop(){//刪除最近添加的元素Item item=a[--N];// 刪除棧頂元素a[N]=null;//避免對象游離if(N>0 && N==a.length/4) resize(a.length/2);return item;}private void resize(int max){//增加數組長度Item[] temp=(Item[]) new Objects[max];for(int i=0;i<N;i++){temp[i]=a[i];}a=temp;}}public static void main(String[] args) {stack<Integer> integerstack = new stack<Integer>(100);integerstack.push(123);integerstack.push(1);integerstack.push(13);integerstack.push(23);Iterator<Integer> iterator = integerstack.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}} }

再來講講游離的問題吧

java中的垃圾回收策略是回收所有無法被訪問的對象的內存。而上邊pop()方法中被彈出的元素的引用其實還是存在在數組中。但是這個元素其實已經永遠無法被訪問了,但是java的垃圾收集器比較“機智”沒辦法知道這一點,除非該引用被覆蓋不然他沒辦法被訪問。所以這種保存一個不需要的對象的引用就是游離。在此避免游離的方法很簡單就是給他賦值為null即可,這將覆蓋無用的引用并使系統使用例被彈出的元素后回收它的內存。

總結

以上是生活随笔為你收集整理的复习---使用基础语法实现栈及迭代的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。