返回逆序遍历的迭代器,我的remove()方法对吗?就是把刚刚访问的元素删掉吧!

liuyizhou 发布于 2018/03/27 09:38
阅读 117
收藏 1

package com.stack;

import java.util.Iterator;

public class ResizeArrayStack<Item> implements Iterable<Item> {
    
    private Item[] a = (Item[]) new Object[1];
    private static int N = 0;//栈内元素个数
    
    //入栈
    public void push(Item item){
        if(N>=a.length){
            resize(2*a.length);
        }
        a[N++] = item;
    }
    //重置数组大小
    private void resize(int size) {
        Item[] tmp = (Item[]) new Object[size];
        for(int i=0;i<N;i++){
            tmp[i] = a[i];
        }
        a = tmp;
    }
    //出栈
    public Item pop(){
        if(N==0){
            throw new NullPointerException("没有元素了");
        }
        Item item = a[--N];
        if(N<=a.length/4){
            resize(a.length/2);
        }
        return item;
    }
    //是否为空
    public boolean isEmpty(){
        return N == 0;
    }
    //元素个数
    public int size(){
        return N;
    }
    
    @Override
    public Iterator<Item> iterator() {
        return new ReverseArrayIterator();
    }
    private class ReverseArrayIterator implements Iterator<Item>{
        private int i = N;
        @Override
        public boolean hasNext() {
            return i>0;
        }

        @Override
        public Item next() {
            return a[--i];
        }

        @Override
        public void remove() {
            //移除刚遍历过的元素
            for(int j = i;j<N;j++){
                a[j]=a[j+1];
            }
        }

        
    }
    public static void main(String[] args) {
        ResizeArrayStack<String> arrayStack = new ResizeArrayStack<String>();
        arrayStack.push("a");
        arrayStack.push("b");
        arrayStack.push("c");
        System.out.println("元素个数:"+arrayStack.size());
        System.out.println("删除前========");
        
        for(String s :arrayStack){
            System.out.println(s);
        }
        System.out.println("删除中========");
        Iterator<String> iterator = arrayStack.iterator();
        while(iterator.hasNext()){
            String s =iterator.next();
            System.out.println(s);
            if(s.equals("b")){
                iterator.remove();
                N--;
            }
            
        }
        System.out.println("删除后=========");
        for(String s :arrayStack){
            System.out.println(s);
        }
        System.out.println("------------------");
        System.out.println(arrayStack.pop());
        System.out.println(arrayStack.pop());
        System.out.println(arrayStack.pop());
    }
}
 

加载中
返回顶部
顶部