前些天编小程序,写其中有一个自己实现的stack的pop如下:
public class Stack{ private ArrayList list; public Stack(){ list = new ArrayList(); } public T pop(){ if(list.size != 0 ){ T popOut = list.get(list.size - 1); remove(popOut); return popOut; } else{ return null; } } } |
我当时在另一个类里debug,愣是找不出来,最后才发现这里的pop方法出问题了。当list是int数据时,若list为1,2,3,2;pop出来是2,但是list并不如想象中的为1,2,3;而是变成了1,3,2;这是因为double的equals方法认定只要值一样两者就一样,它popPut为2,接着remove(2);它在找到第一个2是就认为那已经匹配了,就把它删除,所以remove中应该用他的重载函数remove(list.size - 1).
当然还应该注意若是int型的他优先将其认为是index而非数据
···
···