Stack的初步学习
import java.util.Iterator;
public class Stack<Item> implements Iterable<Item>{
private Node first;
private int N;
private static int cnt = 0;
private class Node {
Item item;
Node next;
}
private class MyIterator implements Iterator<Item> {
int n = cnt;
private Node cur = first.next;
@Override
public Item next() {
if(n!=cnt){
throw new java.util.ConcurrentModificationException() ;//不允许执行pop与push
}
if(cur!=null){
Item i = cur.item;
cur = cur.next;
return i;
}
return null;
}
@Override
public boolean hasNext() {
if(n!=cnt){
throw new java.util.ConcurrentModificationException() ;
}
return cur!=null;
}
@Override
public void remove() {
}
}
@Override
public Iterator<Item> iterator() {
return new MyIterator();
}
Stack(){
first = new Node();
first.item = null;
first.next = null;
}
public void push(Item item){
cnt++;
Node temp = new Node();
temp.item = item;
temp.next = first.next;
first.next = temp;
N++;
}
public Item pop(){
cnt++;
Node temp = first.next;
Item i;
if(temp==null){
return null;
}
first.next = temp.next;
i = temp.item;
temp = null;
N--;
return i;
}
public boolean isEmpty(){
return N==0||first.next==null;
}
}
class AA{
public static void main(String... args){
Stack<String> s = new Stack<String>();
System.out.println(s.pop());
s.push(" ha ha");
s.push(" hello");
s.push(" world");
Iterator i = s.iterator();
try{
for(String str:s){
System.out.println(str);
}
//s.push("11");
for(String str:s){
System.out.println(str);
s.push("11");
}
}catch (java.util.ConcurrentModificationException e){
System.out.println("迭代器中不可更改集合数据");
e.printStackTrace();
}
}
}
(未完待续)