生活随笔
收集整理的這篇文章主要介紹了
复习---使用基础语法实现栈及迭代
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上圖是最最基本的結構,這次我采用數組實現棧。使用數組實現棧,由于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即可,這將覆蓋無用的引用并使系統使用例被彈出的元素后回收它的內存。
總結
以上是生活随笔為你收集整理的复习---使用基础语法实现栈及迭代的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。