【发布时间】:2012-08-21 05:03:03
【问题描述】:
我在这个练习中使用了一个算法来实现。我有这个主要的:
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!!
}
【问题讨论】:
-
很难理解你想要什么。就像现在描述的问题一样,即使是一个简单的 getter 也可以。
public Set<Person> contacts() { return friends; }。它只会返回朋友集,并将使用它的 (Set's) 迭代器。不知道这是否是你想要的。 -
P.S.如果
name从未更改(仅在构造函数中分配值),通常将其声明为final是一个好习惯。 (这与您的问题没有任何关系,只是一个提示)。
标签: java collections foreach iterator iterable