昨天晚上跟同事吃饭的时候 说道之前面试的时候 面试官问他的一个问题 在遍历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
网友评论