2010-01-05 3 views
2

Я пытаюсь изучить java лучше, и у меня есть один вопрос.java function - печать (коллекция c)?

Скажем, у меня есть две коллекции: ArrayList и LinkedHashSet. Можно ли сделать функцию, как это:

void print(collection c) { 
    for (object tmp:c) { 
     System.out.println(tmp); 
    } 
} 
+2

Просто капитализировать Collection и объект, а затем вы сделали. –

ответ

7

Следи за капитализацию:

private void printCollection(Collection collection) { 

    for (Object obj : collection) { 
     System.out.println(obj); 
    } 
} 
+1

Должно быть 'for (Object obj: c)' –

+1

Секунды слишком поздно. Должно быть 'Collection ' и 'element' или' e' вместо 'obj'. –

+1

Убедитесь, что вы реализуете метод toString() – Brendan

2

Да. ArrayList и LinkedHashSet являются коллекциями. Метод, который вы написали, принимает коллекцию (обратите внимание на капитал C), поэтому он будет принимать любые типы коллекций. Это называется полиморфизмом.

-2

в основном вам просто нужно ВЗ использовать итератор:

void print(collection c) 
{ 
    for (object tmp:c.iterator()) 
    { 
     System.out.println(tmp); 
    } 
} 
+3

В Java итераторы не являются итерабельными. Вы можете использовать только для каждого из iterables, а не для итераторов. –

+0

ack, true. но кто был гениальным, кто это решил? :) –

1

Вполне возможно, что оба типа реализации Collection<E>. Соглашение предназначено для типов классов в Java, чтобы начать с большой буквы. Начиная с 1.5, Java использовал generics для своих коллекций, и вы должны использовать их во всех новых кодах. Поскольку вы используете цикл 1.5 style for, вы должны написать общий код.

Как правило, лучше использовать функции по наименее конкретному типу, поскольку это дает самое широкое повторное использование. В этом случае вам нужно только что-то, что можно было бы сделать от Collection<T> до Iterable<T>, поскольку вам нужно только что-то, что будет работать с циклом for. Таким образом, комбинируя дженерики и меньше мощности дает:

public class PrintLinePrinter { 
    public <T> void print (Iterable<T> collection) { 
     for (T item : collection) { 
      System.out.println(item); 
     } 
    } 
} 
+1

'T' не нужно. просто сделайте 'public void print (коллекция Iterable )' и измените 'T item' на' Object item' – user102008

1

System.out.println (Collection с) уже напечатать любой тип коллекции в удобном для чтения формате. Но если коллекция содержит определенные пользователем объекты, вам необходимо реализовать toString() в определенном пользователем классе.

0

'Loop бесплатно' Решение:

void print(collection c) { 
    System.out.println(Arrays.toString(c.toArray())); }