【问题标题】:Retrieve value from int array inside objects ArrayList从对象 ArrayList 内的 int 数组中检索值
【发布时间】:2021-06-23 18:20:28
【问题描述】:

我在 ArrayList 上进行实验,它包含不同的数据类型和一个 int 数组,我想从数组中访问一个值,例如数字 55。我可以不使用 for 循环直接访问这个数组吗?如何覆盖这个 int 数组的 toString 方法,这样我就不会得到这样的条目:[I@2401f4c3?另外我不知道如何正确定义 for 循环,因为它在控制台中只打印了 1 次数组,但它应该打印 4 次。有任何想法请与我们分享。

ArrayTest 类:

public class ArrayTest {

    public static void main(String[] args) {
        ArrayList<Object> strangeList = new ArrayList<>();

        strangeList.add("String");
        strangeList.add(3823);
        strangeList.add(new int[] { 329, 23882, 55, 932 });

        System.out.println(strangeList.size());
        System.out.println();

        for (int i = 0; i < strangeList.size(); i++) {
            if (i == 2) {
                for (int j = 0; j < strangeList.size(); j++) {
                    System.out.println(strangeList.get(j));
                }
            }
        }
    }
}

【问题讨论】:

    标签: java arrays for-loop object arraylist


    【解决方案1】:

    使用obj.getClass().isArray(),检查obj的类型是否为数组,如果是则打印Arrays.toString((int[]) obj);否则,打印obj,其中obj 是来自strangeList 的元素。

    演示:

    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Main {
        public static void main(String[] args) {
            ArrayList<Object> strangeList = new ArrayList<>();
    
            strangeList.add("String");
            strangeList.add(3823);
            strangeList.add(new int[] { 329, 23882, 55, 932 });
    
            System.out.println(strangeList.size());
            System.out.println();
    
            for (int i = 0; i < strangeList.size(); i++) {
                Object obj = strangeList.get(i);
                Class<?> claz = obj.getClass();
                if (claz.isArray()) {
                    if (claz.getComponentType() == int.class) {
                        System.out.println(Arrays.toString((int[]) obj));
                    } else if (claz.getComponentType() == double.class) {
                        System.out.println(Arrays.toString((double[]) obj));
                    }
                    // ...
                } else {
                    System.out.println(obj);
                }
            }
        }
    }
    

    输出:

    3
    
    String
    3823
    [329, 23882, 55, 932]
    

    【讨论】:

      【解决方案2】:

      您拥有的第二个 for 循环遍历同一个数组而不是您的 int 数组来遍历您需要首先获得的 int 数组。但由于起始数组是 object 类型,因此您需要“告诉”(强制转换)java 它实际上是一个 int 数组。

      for (int i = 0; i < strangeList.size(); i++) {
          if (i == 2) {
      
              int[] myIntArray = (int[]) strangeList.get(2);
              for (int j = 0; j < myIntArray.length; j++) {
                  System.out.println(myIntArray[j]);
              }
          }
      }
      

      【讨论】:

      • 您好,谢谢您的评论。我已经尝试过了,但是方法 size() 没有为 Object 类型定义。这是不可能的:/
      • 嘿,这个很好用,谢谢!我正在考虑让它更动态,就像它是一个双 [] 而不是 int []。我们如何检查我们拥有哪种类型的数组?
      • 类似this
      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多