Java实现Iterable,对于每个和方法
Posted
技术标签:
【中文标题】Java实现Iterable,对于每个和方法【英文标题】:Java implement Iterable, for each and method 【发布时间】: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
是一个好习惯。 (这与您的问题没有任何关系,只是一个提示)。
【参考方案1】:
让您的contacts()
方法的返回类型为Set of Person
....
public Set<Person> contacts()
return friends;
所以现在下面将工作......
for (Person p : a.contacts())
System.out.println(p);
【讨论】:
【参考方案2】:由于您想为Person
运行循环,因此:
旁边的位置应该是Person
类型的集合。
for(Person p: a.contacts())
System.out.println(p);
您可以为此选择List
或Set
,并从Person
类的contacts()
方法返回集合。
在这种情况下,因为你有 Set
所以返回它。
public Set<Person> contacts()
return friends;
【讨论】:
为什么不隐藏实现细节并返回Collection<Person>
呢?
有道理...但是由于 OP 对返回的内容感到困惑...我想保持简单!!【参考方案3】:
使用 Collection
public Iterable<Person> contacts()
return new Iterable<Person>()
public Iterator<Person> iterator()
return friends.iterator();
;
【讨论】:
以上是关于Java实现Iterable,对于每个和方法的主要内容,如果未能解决你的问题,请参考以下文章
请问java中的Iterator和Iterable有些啥区别啊?
java中自己实现一个可以用foreach循环的类 Iterable,Iterator