2012-02-13 35 views
47

Tôi có một ArrayList chứa các đối tượng Địa chỉ.In ArrayList

Làm cách nào để in các giá trị của ArrayList này, có nghĩa là tôi đang in ra nội dung của mảng, trong trường hợp này là số.

tôi chỉ có thể lấy nó để in ra địa chỉ bộ nhớ thực tế của mảng với mã này:

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

nào bạn muốn địa chỉ s vị trí trong bộ nhớ? –

+0

xin lỗi, tôi không hiểu ý bạn là gì. arraylist đang lưu trữ địa chỉ trỏ đến mảng, và tôi muốn in nội dung của mảng, nhưng tôi không biết làm thế nào để đi về nó. – dancooper93

+0

Tôi đã cố gắng viết lại câu hỏi để làm cho nó rõ ràng hơn. –

Trả lời

5

Bạn có nói rằng ArrayList được lưu trữ địa chỉ của mảng bởi vì đó là những gì được trở về từ toString cuộc gọi hoặc vì đó thực sự là những gì bạn đang lưu trữ?

Nếu bạn có một ArrayList của mảng (ví dụ

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

Sau đó, để in các giá trị mảng bạn cần phải gọi Arrays.deepToString:

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

vì bạn đã không cung cấp một cài đặt tùy chỉnh cho toString() phương thức mà nó gọi là mặc định mà trên đó sẽ in địa chỉ trong bộ nhớ cho đối tượng đó

giải pháp trong lớp học Địa chỉ của bạn ghi đè lên các phương pháp toString() như thế này

public class Address { 

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

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

bây giờ khi bạn gọi

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

System.out.print(houseAddress.get(i)) các toString() của đối tượng Address sẽ được gọi

12

Thêm toString() phương pháp để của bạn address lớp rồi làm

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

Điều này sẽ chỉ làm việc cho một mảng, không phải là một danh sách mảng. Bạn không thể cung cấp 'houseAddress' làm đối số cho' Arrays.toString() 'bởi vì nó không thuộc kiểu Array. – beckah

+0

trong vòng lặp ý kiến ​​của tôi là chỉ có thể wayout ở đây, nếu có ai biết tùy chọn tốt hơn xin vui lòng chia sẻ. – geniushkg

2

Đặt houseAddress.get (i) bên trong dấu ngoặc và gọi ToString() chức năng: ví dụ: Xin vui lòng xem bên dưới

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

Bạn tuân thủ quy ước về loại mã nào? – Lobato

+0

@ Mr.Goose tôi không nhận được câu hỏi của bạn khá rõ ràng, bạn có ý nghĩa gì? – 21stking

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

Điều này không khác với mã hiện tại của OP. Vấn đề vẫn còn. – Tom

3

Bạn chỉ có thể cung cấp cho nó như:

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

Đầu ra của bạn sẽ trông giống như [address1, address2, address3]

Điều này là do lớp ArrayList hoặc của nó superclass sẽ có một hàm toString() được ghi đè.

Hy vọng điều này sẽ hữu ích.

1

Tôi không chắc chắn nếu tôi hiểu khái niệm về địa chỉ (Tôi giả định houseAddress đây), nhưng nếu bạn đang tìm kiếm cách một để in ArrayList, here you go:

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

Sản lượng tương tự được in bởi System.out.println (danh sách); – Asha

+0

danh sách là houseAddress ở đây: 'Arrays.toString (houseAddress.toArray())' – Beginner

1

Điều này đã giúp tôi:

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

Kể từ Java 8, bạn có thể sử dụng foreach() phương pháp từ Giao diện có thể lặp lại.
Đó là phương pháp mặc định. Là một đối số, phải mất một đối tượng của lớp, thực hiện giao diện chức năng Người tiêu dùng. Bạn có thể thực hiện tiêu dùng tại địa phương theo ba cách:

Với annonymous lớp:

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

lambda biểu:

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

hoặc bằng cách sử dụng phương pháp tham khảo:

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

Cách in này hoạt động cho tất cả các triển khai của Giao diện Iterable.
Tất cả đều cung cấp cho bạn cách xác định cách các thành phần sẽ được in, trong khi toString() thi hành danh sách in ở một định dạng.

6

Từ những gì tôi hiểu bạn đang cố gắng in một ArrayList của mảng và cách duy nhất để hiển thị đó sẽ là

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

Bạn có thể sử dụng một Iterator. Đó là điều đơn giản nhất và ít controvercial nhất để làm ở đây. Nói houseAddress có giá trị của kiểu dữ liệu String

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

Lưu ý: Bạn thậm chí có thể sử dụng một tăng cường cho vòng lặp cho điều này như đã đề cập bởi tôi trong một câu trả lời

+0

p.s. nó là ít controvercial bởi vì bạn không làm bất kỳ chuyển đổi không cần thiết trên đây như chuyển đổi ArrayList để mảng và sau đó chuyển đổi nó thành chuỗi để in nó –

0

Bạn thậm chí có thể sử dụng một tăng cường cho vòng lặp hoặc một iterator như

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

bạn có thể thay đổi nó thành bất cứ houseAddress kiểu dữ liệu là gì và nó tránh chuyển đổi unnecesarry

+0

cảm thấy tự do để chỉnh sửa câu trả lời của bạn nếu bạn bỏ lỡ một cái gì đó. Tốt hơn là tiếp tục thảo luận trong nhận xét –