我正在努力学习java,我有一个问题。
假设我有两个集合,一个ArrayList和一个LinkedHashSet。是否可以制作这样的函数:
void print(collection c) {
for (object tmp:c) {
System.out.println(tmp);
}
}
答案 0 :(得分:7)
注意你的大写:
private void printCollection(Collection collection) {
for (Object obj : collection) {
System.out.println(obj);
}
}
答案 1 :(得分:2)
是。 ArrayList和LinkedHashSet都是集合。您编写的方法接受Collection(注意大写C),因此它将接受任何类型的集合。这被称为多态。
答案 2 :(得分:1)
这两种类型都可以实现Collection<E>
。约定是Java中的类类型以大写字母开头。从1.5开始,Java已将generics用于其集合,您应该在所有新代码中使用它们。由于您使用的是1.5样式for
循环,因此应编写通用代码。
通常最好使函数尽可能在最不具体的类型上运行,因为这样可以实现最广泛的重用。在这种情况下,你只需要一些可以从Collection<T>
到Iterable<T>
的东西,因为你只需要一些可以用于for循环的东西。因此,结合泛型和最小功率给出了:
public class PrintLinePrinter {
public <T> void print (Iterable<T> collection) {
for (T item : collection) {
System.out.println(item);
}
}
}
答案 3 :(得分:1)
System.out.println(Collection c)已经以可读格式打印任何类型的集合。 但是如果集合包含用户定义的对象,那么您需要在用户定义的类中实现toString()。
答案 4 :(得分:0)
'免费循环'解决方案:
void print(collection c) {
System.out.println( Arrays.toString(c.toArray())); }
答案 5 :(得分:-2)
基本上你只需要使用迭代器:
void print(collection c)
{
for (object tmp:c.iterator())
{
System.out.println(tmp);
}
}