概述
实验踩坑记录:Java迭代器iterator无法remove、remove失败原因以及Iterator源码分析
第一个坑
在软件构造Lab2实验过程中遇到一个问题,调用Set的iterator.remove函数时无法删除,且未报错,但是单步运行时发现所比较对象时完全相同的,根据重写的equals()函数也可判断相同,以下为原代码:
public static boolean removePiece(Player player, Piece piece){
Iterator iterator = player.pieces.iterator();
while (iterator.hasNext()){
if (piece.equals(iterator.next())) {
iterator.remove();
return true;
}
}
return false;
}
经单步运行时注意到一个细节,由于未重载hashCode函数,本该相同的iterator.next()和piece的hashCode不同,根据如下hash规则:
如果hash相同,对象不一定相等;但是如果hash不同,则对象一定不相等。
因此在不重载hashCode的前提下,重新修改该方法为:
public static boolean removePiece(Player player, Piece piece){
Iterator iterator = player.pieces.iterator();
wh
最后
以上就是活力高跟鞋为你收集整理的java迭代器实例不能赋值给链表_实验踩坑记录:Java迭代器iterator无法remove、remove失败原因以及Iterator源码分析...的全部内容,希望文章能够帮你解决java迭代器实例不能赋值给链表_实验踩坑记录:Java迭代器iterator无法remove、remove失败原因以及Iterator源码分析...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复