java 运行完iterator.hasnext() foreach不运行了

packagereread;importjava.util.*;classPerson{privateStringname,type;publicPerson(){}pu... package reread;import java.util.*;class Person{ private String name,type; public Person() { } public Person(String name, String type) { this.name = name; this.type = type; } @Override public String toString() { return "Person [name=" + name + ", type=" + type + "]"; } //需要重写Hashcode equals @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (type == null) { if (other.type != null) return false; } else if (!type.equals(other.type)) return false; return true; } }public class ArrayListDemo { public static void main(String[] args) { // TODO Auto-generated method stub List<Person> list=new ArrayList<>(); list.add(new Person("孙悟空","神仙")); list.add(new Person("唐僧","人类")); list.add(new Person("猪八戒","神仙")); list.add(new Person("沙僧","人类")); list.add(new Person("白骨精","妖怪")); list.set(0, new Person("Monkey","神仙")); System.out.println(list.get(1)); System.out.println("初始------------"); for(Person p:list){ System.out.println(p); } System.out.println("Iterator遍历-----------"); Iterator<Person> it=list.iterator(); while(it.hasNext()){ Person per=it.next(); System.out.println(per); if(it.equals(new Person("白骨精","妖怪"))); it.remove(); } System.out.println("最终遍历------------"); for(Person p:list){ System.out.println(p); } }}最后的最终遍历却没有显示下文怎么解决? 为什么别人的都显示了 展开
 我来答
dark19861201
2018-03-06 · TA获得超过2153个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1795万
展开全部
import java.util.*;

class Person {
private String name, type;

public Person() {
}

public Person(String name, String type) {
this.name = name;
this.type = type;
}

@Override
public String toString() {
return "Person [name=" + name + ", type=" + type + "]";
}

// 需要重写Hashcode equals
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
}

public class ArrayListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Person> list = new ArrayList<>();
list.add(new Person("孙悟空", "神仙"));
list.add(new Person("唐僧", "人类"));
list.add(new Person("猪八戒", "神仙"));
list.add(new Person("沙僧", "人类"));
list.add(new Person("白骨精", "妖怪"));
list.set(0, new Person("Monkey", "神仙"));
System.out.println(list.get(1));
System.out.println("初始------------");
for (Person p : list) {
System.out.println(p);
}
System.out.println("Iterator遍历-----------");
Iterator<Person> it = list.iterator();
while (it.hasNext()) {
Person per = it.next();
System.out.println(per);
if (per.equals(new Person("白骨精", "妖怪")))
it.remove();
}
System.out.println("最终遍历------------");
for (Person p : list) {
System.out.println(p);
}
}
}

两个问题,

  1. 第一个你的if后面多加了一个;导致最后的it.remove()和if没关系了,所以不显示的原因是你把list里面的所有元素都remove掉了

  2. 其次,判断Person的时候用it去equals,这个永远不会相等的,对象类型都不同

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式