美文网首页
Linklist遍历问题

Linklist遍历问题

作者: employeeeee | 来源:发表于2019-03-28 09:16 被阅读0次

    昨天晚上跟同事吃饭的时候 说道之前面试的时候 面试官问他的一个问题 在遍历linklist的时候 使用for(i=0;i<linklist.size();i++) 这种方式来遍历的时候 会不会报错 当时想了一下 因为linklist的底层也不是数组 是链表 再怎么也不会出现index下标的报错.当时是觉得不会报错的 然后早上来了就测试了一下

    定义了一个接口
    package dao;
    
    import model.Hero;
    
    /**
     * @author employeeeee
     * @Descriotion:
     * @date 2019/3/28 8:48
     */
    public interface Stack {
        //把英雄推入到最后位置
    
        public void push(Hero h);
    
        //把最后一个英雄取出来
    
        public Hero pull();
    
        //查看最后一个英雄
    
        public Hero peek();
    
        //获取当前链表的长度
        public int getSize();
    }
    
    
    接口的实现类
    package dao;
    
    import model.Hero;
    
    import java.util.LinkedList;
    
    /**
     * @author employeeeee
     * @Descriotion:
     * @date 2019/3/28 8:49
     */
    public class MyStackImpl implements Stack {
    
        LinkedList<Hero> heroes = new LinkedList<>();
    
        @Override
        public void push(Hero h) {
            heroes.addLast(h);
        }
    
        @Override
        public Hero pull() {
            Hero hero = heroes.removeLast();
            return hero;
        }
    
        @Override
        public Hero peek() {
            Hero last = heroes.getLast();
            return last;
        }
    
        @Override
        public int getSize() {
            int size = heroes.size();
            return size;
        }
    }
    
    测试类
    package testclass;
    
    import dao.MyStackImpl;
    import dao.Stack;
    import model.Hero;
    
    /**
     * @author employeeeee
     * @Descriotion:
     * @date 2019/3/28 8:53
     */
    public class StackTest {
        public static void main(String[] args) {
            MyStackImpl myStack = new MyStackImpl();
            for (int i=0;i<5;i++){
                Hero hero = new Hero("英雄" + i);
                System.out.println("向栈中加入英雄"+ i);
                myStack.push(hero);
            }
    
            for (int i=0;i<myStack.getSize();i++){
                Hero peek = myStack.pull();
                System.out.println("peek出栈" + peek);
            }
        }
    }
    

    然后运行后 发现没有报错 但是遍历出来的数据是不全的 就像是这样


    image.png

    然后就想了一下 linklist查询的时候 是会把list中最后一个数据取出来 并从list中删掉 那么list的size是减少1的 所以就相当于i从0开始加 而size在从size开始减 当他们遇到中间值得时候 那么就停止了循环
    所以需要修改一下for循环的代码
    改为

      for (int i=0;i<myStack.getSize();i+=0){
                Hero peek = myStack.pull();
                System.out.println("peek出栈" + peek);
            }
    

    这样就可以将linklist中的数据都遍历出来了


    image.png

    相关文章

      网友评论

          本文标题:Linklist遍历问题

          本文链接:https://www.haomeiwen.com/subject/nusfbqtx.html