In ArrayList


81

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

Làm cách nào để in các giá trị của ArrayList này, nghĩa là tôi đang in ra nội dung của Array, 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 của mảng với mã này:

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

bạn có muốn vị trí địa chỉ trong bộ nhớ?
Paul Nikonowicz

xin lỗi, tôi không hiểu ý bạn. danh sách mảng đ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 cách thực hiện.
dancooper93

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

Theo Địa chỉ, ý anh ấy là Địa chỉ nhà. Tôi nghĩ.
Kuldeep Jain

1
Vui lòng cung cấp cho chúng tôi phần khai báo của houseAddressbiến và một số mã mẫu cho các phần tử mà nó chứa.
Louis Wasserman

Câu trả lời:


110
Arrays.toString(list.toArray())

Đầu ra tương tự được in bởi System.out.println (list);
Asha

4
danh sách là nhàĐịa chỉ ở đây:Arrays.toString(houseAddress.toArray())
Beginner

3
AbstractCollection đã ghi đè toString()để in nội dung của các phần tử của nó. Vì vậy, chỉ cần list.toString()in toString()tất cả các phần tử của nó. Điều này đúng cho tất cả các bộ sưu tập.
Hanif

18

Thêm toString()phương thức vào addresslớp của bạn rồi thực hiện

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

39
Điều này sẽ chỉ hoạt động cho một mảng, không phải một danh sách mảng. Bạn không thể cung cấp houseAddresslàm đối số Arrays.toString()vì nó không thuộc kiểu Mảng.
beckah

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

17

Theo những gì tôi hiểu, bạn đang cố gắng in ArrayList gồm các mảng và một cách để hiển thị đó là

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

9

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

giải pháp trong lớp Địa chỉ của bạn ghi đè toString()phương thức 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 Addressđối tượng sẽ được gọi


7

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

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

Đầu ra của bạn sẽ như thế nào [address1, address2, address3]

Điều này là do lớp ArrayList hoặc lớp cha của nó sẽ có hàm toString () bị ghi đè.

Hi vọng điêu nay co ich.


7

cho rằng bạn có một danh sách số như thế

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

nếu bạn in danh sách

//method 1
// Conventional way of printing arraylist
for (int number : numbers) {
    System.out.print(number);
}

//method 2
// Lambda Expression to print arraylist
numbers.forEach((Integer value) -> System.out.print(value));

//method 3
// Lambda Expression to print arraylist
numbers.forEach(value -> System.out.print(value));


//method 4
// Lambda Expression (method reference) to print arraylist
numbers.forEach(System.out::print);

5

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

Nếu bạn có một ArrayListtrong các mảng (ví dụ:

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

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

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

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

Đ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

Kể từ Java 8 , bạn có thể sử dụng phương thức forEach () từ giao diện Iterable .
Đó là một phương pháp mặc định. Như một đối số, nó nhận 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ể triển khai Người tiêu dùng cục bộ theo ba cách:

Với lớp ẩn danh :

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

biểu thức lambda :

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

hoặc bằng cách sử dụng tham chiếu phương pháp :

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ả chúng, cung cấp cho bạn cách xác định cách các phần tử sẽ được in, trong khi toString () thực thi danh sách in ở một định dạng.


3

Đặt houseAddress.get(i)bên trong dấu ngoặc và gọi .toString()hàm: tức là Vui lòng xem bên dưới

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

@ Mr.Goose, tôi không hiểu câu hỏi của bạn khá rõ ràng, ý bạn là gì?
Ngày 21

lệnh gọi tới .toString () là dư thừa.
Gabriel Pellegrino

2

Tôi không chắc liệu mình có hiểu khái niệm về địa chỉ hay không (tôi giả sử là houseAddress ở đây), nhưng nếu bạn đang tìm cách in ArrayList, thì bạn vào đây:

System.out.println(houseAddress.toString().replaceAll("\\[\\]", ""));

2
 public static void main(String[] args) {
        List<Moyen> list = new ArrayList<Moyen>();
        Moyen m1 = new Moyen();
        m1.setCodification("c1");
        m1.setCapacityManager("Avinash");
        Moyen m2 = new Moyen();
        m2.setCodification("c1");
        m2.setCapacityManager("Avinash");
        Moyen m3 = new Moyen();
        m3.setCodification("c1");
        m3.setCapacityManager("Avinash");

        list.add(m1);
        list.add(m2);
        list.add(m3);
        System.out.println(Arrays.toString(list.toArray()));
    }

2

Cách đơn giản nhất để in ArrayList là sử dụng toString

List<String> a=new ArrayList<>();
    a.add("111");
    a.add("112");
    a.add("113");
    System.out.println(a.toString());

Đầu ra

[111, 112, 113]


2

Bạn có thể sử dụng một Trình lặp lại. Đó là điều đơn giản nhất và ít kiểm soát nhất để làm ở đây. Say houseAddresscó các giá trị của kiểu dữ liệuString

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

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


1
ps nó là controvercial nhất vì bạn không làm bất kỳ chuyển đổi unnecesary trên đây như chuyển đổi ArrayList để Array và sau đó chuyển đổi nó vào chuỗi in nó
Ishan Srivastava

1

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

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

1

nếu bạn đặt @Override công khai String toString () dưới dạng nhận xét, bạn sẽ có kết quả giống như bạn đã làm. Nhưng nếu bạn triển khai phương thức toString () của mình, nó sẽ hoạt động.

public class PrintingComplexArrayList {

public static void main(String[] args) {
    List houseAddress = new ArrayList();
    insertAddress(houseAddress);
    printMe1(houseAddress);
    printMe2(houseAddress);
}

private static void insertAddress(List address)
{
    address.add(new Address(1));
    address.add(new Address(2));
    address.add(new Address(3));
    address.add(new Address(4));
}
private static void printMe1(List address)
{
    for (int i=0; i<address.size(); i++)
        System.out.println(address.get(i));
}

private static void printMe2(List address)
{
    System.out.println(address);
}

}

lớp Địa chỉ {private int addr; Địa chỉ công cộng (int i) {addr = i; }

@Override public String toString()
{
    Integer iAddr = new Integer (addr);
    return iAddr.toString();
}

}


1

Bạn thậm chí có thể sử dụng vòng lặp for nâng cao hoặc trình vòng lặp như:

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

Bạn có thể thay đổi nó thành bất kỳ loại dữ liệu nào houseAddressvà nó tránh được các chuyển đổi không cần thiết


1

JSON

Một Giải pháp thay thế có thể là chuyển đổi danh sách của bạn ở định dạng JSON và in Json-String. Ưu điểm là Chuỗi đối tượng được định dạng tốt và có thể đọc được mà không cần triển khai toString(). Thêm vào đó, nó hoạt động cho bất kỳ người nào khác Objecthoặc Collectionđang di chuyển.

Ví dụ sử dụng Gson của Google :

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

...
public static void printJsonString(Object o) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    /*
     * Some options for GsonBuilder like setting dateformat or pretty printing
     */
    Gson gson = gsonBuilder.create();
    String json= gson.toJson(o);
    System.out.println(json);
}

0

Đảm bảo rằng bạn có getter trong lớp địa chỉ Nhà và sau đó sử dụng:

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

1
Chào mừng bạn đến với Stack Overflow . Vui lòng xem lại phần Cách trả lờichỉnh sửa câu hỏi của bạn cho phù hợp.
compor

0

bạn có thể sử dụng định dạng in nếu bạn chỉ muốn in phần tử trên bảng điều khiển.

for(int i = 0; i < houseAddress.size(); i++) {   
    System.out.printf("%s", houseAddress.get(i));
}  

0

Giả sử đó houseAddress.get(i)là một ArrayListbạn có thể thêm toString()vào sau ArrayList:

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

Một ví dụ chung:

ArrayList<Double> a = new ArrayList();
a.add(2.);
a.add(32.);
System.out.println(a.toString());
// output
// [2.0, 32.0]

0

Đây là một mã đơn giản để thêm giá trị trong ArrayList và in Giá trị ArrayList

public class Samim {

public static void main(String args[]) {
    // Declare list
    List<String> list = new ArrayList<>();

    // Add value in list
    list.add("First Value ArrayPosition=0");
    list.add("Second Value ArrayPosition=1");
    list.add("Third Value ArrayPosition=2");
    list.add("Fourth Value ArrayPosition=3");
    list.add("Fifth Value ArrayPosition=4");
    list.add("Sixth Value ArrayPosition=5");
    list.add("Seventh Value ArrayPosition=6");

    String[] objects1 = list.toArray(new String[0]);

    // Print Position Value
    System.err.println(objects1[2]);

    // Print All Value
    for (String val : objects1) {
        System.out.println(val);
      }
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.