[软件构造] lab2相关
重写equals
本次实验使用到list的contains和indexOf方法,而indexOf()中使用了equals来进行比较。
由于我们要对自定义的Edge类进行indexOf,所以需要在Edge重写equals。
网上搜素了一下,重新equals的主要构成如下:
- 判断对象非空
- 校验对象是否是目标实例
- 为保证程序鲁棒性,强行做类型转换
- 对象中的每个参数做条件说明
对于这次实验,在Edge重写equals如下
@Override
public boolean equals(Object obj) {
if (obj == null) return false; //1. 判断对象非空
if (obj instanceof Edge){ //2. 校验对象是否是目标实例
Edge e = (Edge)obj; //3. 强行做类型转换
return (this.from == e.from) && (this.to == e.to);//4. 对象中的每个参数做条件说明
}
return false;
}
(如果是要改写HashMap、HashSet、HashTable中的equals,似乎同时也要改写hashCode。
list,遍历时删除元素
不能直接使用list.remove
Iterator<Edge> it = edges.iterator();
while (it.hasNext()) {
Edge e = it.next();
if (e.to() == vertex || e.from() == vertex) it.remove();
}