2012-02-13 3 views
47

У меня есть ArrayList, содержащий объекты Address.Печать ArrayList

Как распечатать значения этого массива ArrayList, то есть я распечатываю содержимое массива, в этом случае номера.

Я могу только получить его, чтобы распечатать фактический адрес памяти массива с этим кодом:

for(int i = 0; i < houseAddress.size(); i++) { 
    System.out.print(houseAddress.get(i)); 
} 
+0

вы хотите, чтобы Адресные s в памяти? –

+0

Извините, я не понимаю, что вы имеете в виду. arraylist хранит адрес, указывающий на массив, и я хочу распечатать содержимое массива, но я не знаю, как это сделать. – dancooper93

+0

Я попытался изменить вопрос, чтобы сделать его более ясным. –

ответ

5

Вы говорите, что ArrayList хранят адреса массивов, потому что это то, что возвращается из toString вызова , или потому что это на самом деле то, что вы храните?

Если у вас есть ArrayList массивов (например

int[] arr = {1, 2, 3}; 
houseAddress.add(arr); 

Затем напечатать массив значений нужно вызвать Arrays.deepToString:

for (int i = 0; i < houseAddress.size(); i++) { 
    System.out.println(Arrays.deepToString(houseAddress.get(i))); 
} 
8

, так как вы не обеспечивают собственную реализацию для toString() метод вызывает по умолчанию, по которому будет печататься адрес в памяти для этого объекта

решение в Адресной классе переопределить toString() метод как этот

public class Address { 

int addressNo ; 
.... 
.... 
... 

protected String toString(){ 
    return Integer.toString(addressNo); 
} 

теперь, когда вы звоните

houseAddress.get(i) in the `System.out.print()` method like this 

System.out.print(houseAddress.get(i))toString() из Address объекта будет называться

12

Добавить toString() метод ваш address класс затем

System.out.println(Arrays.toString(houseAddress)); 
+34

Это будет работать только для массива, а не для массива. Вы не можете предоставить 'houseAddress' в качестве аргумента для' Arrays.toString() ', потому что это не тип Array. – beckah

+0

, на мой взгляд, цикл может быть возможен только здесь, если кто-нибудь знает лучший вариант, пожалуйста, поделитесь. – geniushkg

2

Помещенный houseAddress.get (I) внутри скобок и вызвать функцию .ToString(): то есть смотрите ниже

for(int i = 0; i < houseAddress.size(); i++) {System.out.print((houseAddress.get(i)).toString()); 
} 
+2

Какие кодексы вы придерживаетесь? – Lobato

+0

@ Mr.Goose, я не понимаю ваш вопрос, что вы имеете в виду? – 21stking

4
public void printList(ArrayList<Address> list){ 
    for(Address elem : list){ 
     System.out.println(elem+" "); 
    } 
} 
+0

Это не отличается от текущего кода OPs. Проблема остается. – Tom

3

Вы можете просто дать как:

System.out.println("Address:" +houseAddress); 

Ваш результат будет выглядеть как [address1, address2, address3]

Это потому, что класс ArrayList или его у суперкласса была бы переопределена функция toString().

Надеюсь, это поможет.

1

Я не уверен, если я понял понятие адреса (я предполагаю, что houseAddress здесь), но если вы ищете образом, чтобы напечатать ArrayList, здесь вы идете:

System.out.println(houseAddress.toString().replaceAll("\\[\\]", "")); 
54
Arrays.toString(list.toArray()) 
+0

Тот же вывод выводится с помощью System.out.println (list); – Asha

+0

Список houseAddress здесь: 'Arrays.toString (houseAddress.toArray())' – Beginner

1

Это помогло мне:

System.out.println(Arrays.toString(codeLangArray.toArray())); 
1

с Java 8, вы можете использовать Foreach() метод из Iterable интерфейс.
Это метод по умолчанию. В качестве аргумента требуется объект класса, который реализует функциональный интерфейс Потребитель. Вы можете реализовать Потребителя локально тремя способами:

С annonymous класса:

houseAddress.forEach(new Consumer<String>() { 
    @Override 
    public void accept(String s) { 
     System.out.println(s); 
    } 
}); 

лямбда-выражения:

houseAddress.forEach(s -> System.out.println(s)); 

или с помощью метода ссылки:

houseAddress.forEach(System.out::print); 

Этот способ печати работает для всех реализаций Iterable Интерфейс.
Все они дают вам способ определения того, как будут печататься элементы, тогда как toString() обеспечивает печать списка печати в одном формате.

6

Из того, что я понимаю, что вы пытаетесь напечатать ArrayList массивов и единственный способ показать, что будет

System.out.println(Arrays.deepToString(list.toArray())); 
0

Вы можете использовать итератор. Это самая простая и наименее спорная вещь. Скажем houseAddress имеет значения типа данных String

Iterator<String> iterator = houseAddress.iterator(); 
    while (iterator.hasNext()) { 
    out.println(iterator.next()); 
    } 

Примечание: Вы можете даже использовать улучшенный цикл для этого, как упоминалось мною в другом ответе

+0

p.s. это наименее противоречиво, потому что вы не делаете никаких ненужных преобразований здесь, как преобразование ArrayList в Array, а затем преобразование его в строку для печати –

0

Вы можете даже использовать улучшенный цикл или итератор, как

for (String name : houseAddress) { 
out.println(name); 
} 

вы можете изменить его на любой houseAddress типа данных и позволяет избежать unnecesarry преобразования

+0

не стесняйтесь редактировать свой ответ, если вы что-то пропустили. Лучше продолжать обсуждение в комментариях –

Смежные вопросы