【问题标题】:Print ArrayList打印数组列表
【发布时间】:2012-03-05 03:52:55
【问题描述】:

我有一个包含 Address 对象的 ArrayList。

我如何打印这个 ArrayList 的值,这意味着我正在打印 Array 的内容,在这种情况下是数字。

我只能用这段代码让它打印出数组的实际内存地址:

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

【问题讨论】:

  • 你想要内存中的地址位置吗?
  • 对不起,我不明白你的意思。 arraylist 正在存储指向数组的地址,我想打印数组的内容,但我不知道该怎么做。
  • 我试图改写问题以使其更清楚。
  • 地址,他的意思是房子地址。我想。
  • 请给我们houseAddress变量的声明,以及它包含的元素的一些示例代码。

标签: java arrays printing arraylist


【解决方案1】:

您是说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)));
}

【讨论】:

    【解决方案2】:

    由于您没有为 toString() 方法提供自定义实现,因此它调用默认值,将在该方法上打印该对象在内存中的地址

    解决方案 在您的 Address 类中覆盖 toString() 这样的方法

    public class Address {
    
    int addressNo ; 
    ....
    ....
    ...
    
    protected String toString(){
        return Integer.toString(addressNo);
    }
    

    现在当你打电话时

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

    Address对象的toString()toString()会被调用

    【讨论】:

      【解决方案3】:

      toString() 方法添加到您的 address 类中,然后执行

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

      【讨论】:

      • 这仅适用于数组,不适用于数组列表。您不能提供houseAddress 作为Arrays.toString() 的参数,因为它不是数组类型。
      • 在我看来循环是唯一可能的出路,如果有人知道更好的选择,请分享。
      【解决方案4】:

      houseAddress.get(i)放在括号内并调用.toString()函数:即请参见下文

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

      【讨论】:

      • @Mr.Goose 我不太清楚你的问题,你是什么意思?
      • 调用 .toString() 是多余的。
      【解决方案5】:
      public void printList(ArrayList<Address> list){
          for(Address elem : list){
              System.out.println(elem+"  ");
          }
      }
      

      【讨论】:

      • 这与 OPs 当前代码没有什么不同。问题依然存在。
      【解决方案6】:

      你可以简单地给它:

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

      您的输出将类似于[address1, address2, address3]

      这是因为类 ArrayList 或其超类将覆盖 toString() 函数。

      希望这会有所帮助。

      【讨论】:

        【解决方案7】:

        我不确定我是否理解地址的概念(我在这里假设 houseAddress),但如果您正在寻找打印 ArrayList 的方法,那么您可以:

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

        【讨论】:

          【解决方案8】:

          list.toString() 已经足够好了。

          接口 List 没有为 toString() 定义契约,但是 AbstractCollection 基类提供了一个有用的实现,ArrayList 继承了这个实现。

          【讨论】:

          • 同样的输出由 System.out.println(list) 打印;
          • 这里的列表是 houseAddress:Arrays.toString(houseAddress.toArray())
          • AbstractCollection 已经覆盖 toString() 以打印其元素的内容。因此,只需 list.toString() 打印其所有元素的 toString()。这适用于所有集合。
          【解决方案9】:

          这对我有帮助:

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

          【讨论】:

            【解决方案10】:

            Java 8 开始,您可以使用 Iterable 接口中的 forEach() 方法。
            这是一种默认方法。作为参数,它需要一个类的对象,它实现了功能接口Consumer。您可以通过三种方式在本地实现 Consumer:

            使用匿名类

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

            lambda 表达式

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

            或使用方法参考

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

            这种打印方式适用于 Iterable 接口的所有实现。
            所有这些都为您提供了定义如何打印元素的方式,而 toString() 强制以一种格式打印列表。

            【讨论】:

              【解决方案11】:

              据我了解,您正在尝试打印数组的 ArrayList 以及一种显示方式

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

              【讨论】:

                【解决方案12】:

                您可以使用迭代器。这是在这里做的最简单,争议最小的事情。假设houseAddress 具有数据类型String 的值

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

                注意:您甚至可以为此使用增强的 for 循环,正如我在另一个答案中提到的那样

                【讨论】:

                • 附注争议最小,因为您没有在这里进行任何不必要的转换,例如将 ArrayList 转换为 Array,然后将其转换为字符串以打印它
                【解决方案13】:

                您甚至可以使用增强的 for 循环或迭代器,例如:

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

                您可以将其更改为houseAddress 的任何数据类型,它可以避免不必要的转换

                【讨论】:

                  【解决方案14】:

                  你有一个这样的数字列表

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

                  如果你打印列表

                  //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);
                  

                  【讨论】:

                    【解决方案15】:

                    如果您将@Override public String toString() 设为 cmets, 你会得到和你一样的结果。 但是如果你实现你的 toString() 方法,它就会起作用。

                    公共类 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);
                    }
                    

                    }

                    班级地址{ 私人 int 地址; 公共地址(int i) { 地址 = 我; }

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

                    }

                    【讨论】:

                      【解决方案16】:

                      确保您在 House address 类中有一个 getter,然后使用:

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

                      【讨论】:

                      【解决方案17】:

                      如果您只想在控制台上打印元素,可以使用打印格式。

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

                      【讨论】:

                        【解决方案18】:
                         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()));
                            }
                        

                        【讨论】:

                          【解决方案19】:

                          假设houseAddress.get(i)ArrayList,您可以在ArrayList 之后添加toString()

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

                          一个一般的例子:

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

                          【讨论】:

                            【解决方案20】:

                            这是在 ArrayList 中添加值并打印 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);
                                  }
                                }
                            }
                            

                            【讨论】:

                              【解决方案21】:

                              打印 ArrayList 的最简单方法是使用 toString

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

                              输出

                              [111, 112, 113]

                              【讨论】:

                              • 我认为在这种情况下不需要 toString 。 ArrayList 覆盖 AbstractCollection 类,因此它将负责打印值
                              【解决方案22】:

                              JSON

                              另一种解决方案是将您的列表转换为 JSON 格式并打印 Json-String。优点是格式良好且可读的对象字符串,无需实现toString()。此外,它适用于任何其他ObjectCollection

                              使用谷歌Gson的示例:

                              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);
                              }
                              

                              【讨论】:

                                【解决方案23】:
                                1. 将 toString() 方法添加到您的类中
                                2. houseAddress.forEach(System.out::println);

                                【讨论】:

                                  猜你喜欢
                                  • 2022-11-12
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2014-06-13
                                  • 1970-01-01
                                  • 2015-08-03
                                  • 2017-06-26
                                  相关资源
                                  最近更新 更多