我使用算法实现此练习。我有这个主要的:
public static void main(String[] args) {
Person a = new Person("Tony");
Person c = new Person("Luke");
Person o = new Person("Ann");
a.addFriends(c);
a.addFriends(o);
for(Person p: a.contacts())
System.out.println(p);
}
如果我用“a”替换“a.contacts()”并使用此类,则代码可以正常工作!但是如何用“a.contacts()”实现for-each循环?感谢
class Person implements Iterable<Person> {
private Set<Person> friends = new HashSet<Person>();
private String name;
public Person(String name){
this.name = name;
}
public void addFriends(Person o){
friends.add(o);
}
public String toString(){
return this.name;
}
@Override
public Iterator<Person> iterator() {
Iterator<Person> i = friends.iterator();
return i;
}
//Here the contacts method to implement!!
}
答案 0 :(得分:1)
让您的contacts()
方法的返回类型为Set of Person
....
public Set<Person> contacts() {
return friends;
}
现在,以下内容将有效......
for (Person p : a.contacts()) {
System.out.println(p);
}
答案 1 :(得分:0)
由于您要为Person
运行循环,因此:
旁边的位置应为Person
类型的集合。
for(Person p: a.contacts())
System.out.println(p);
您可以为此选择List
或Set
,然后从contacts()
类的Person
方法返回该集合。
在这种情况下,因为您已经Set
所以请将其返回。
public Set<Person> contacts() {
return friends;
}
答案 2 :(得分:0)
使用Collection&lt; T&gt;执行此操作与使用Iterable&lt; T&gt;不同。 Iterable&lt; T&gt;的实现允许延迟加载而Collection&lt; T&gt;基于实现要求您在返回之前填充整个集合。处理您的需求的正确方法是在“Person”类中实现以下方法:
public Iterable<Person> contacts() {
return new Iterable<Person>() {
public Iterator<Person> iterator() {
return friends.iterator();
}
};
}