有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用数组在内部存储不同的数据类型

arraylist如何使用array存储不同的数据类型。由于数组是数组列表的内部实现,在数组中,我们只能存储类似的数据类型,如string/int等

想了解arraylist处理多种数据类型数据的内部实现

实际上,我的问题是:在一个列表中,我们可以添加整数、字符串、布尔值等等,但在内部它是由数组实现的。因此,数组如何将不同类型的包装器处理到同一个数组对象中


共 (2) 个答案

  1. # 1 楼答案

    ArrayList是泛型类型

    所以它不能与基元类型一起工作

    它使用对象类型,并使用数组对象进行内部实现

    Object elements[]= new Object[size];
    

    例如,自定义列表:

    public class MyList{
        private static final int DEFAULT_CAPACITY = 10;
        private Object elements[];
    
        public MyList() {
            elements = new Object[DEFAULT_CAPACITY];
        }
    }
    
  2. # 2 楼答案

    ArrayList始终要求对象将其存储在列表中,它使用泛型为特定类型创建列表。例如:

    ArrayList<Integer> intList = new ArrayList<>();
    

    这将为Integer类型创建arraylist,Integer是原始数据类型int的包装类,我们不能创建原始类型的arraylist,我们需要使用包装类。如果不使用泛型,那么:

    ArrayList<> intList = new ArrayList<>();
    

    默认情况下,它是为对象类创建的,对象类是包括包装器类在内的所有类的超类。 现在:

    ArrayList a = new ArrayList<>();
    a.add(1);
    

    在这里,我们创建了一个对象的arraylist,但添加了一个基本整数,它仍然有效,因为它被转换为整数包装器,而object是整数包装器类的超类。所以如果你写:

    Object ab = new Object();
    ab=1;
    

    这是有效的。因此,当您将1添加到arraylist中时,原语1 get将转换为对象类引用的整数包装类

    我希望这能简化你

    除了您的注释,在ArrayList类源代码中,您可以看到存储所有元素的数组只是:

     /**
         * The array buffer into which the elements of the ArrayList are stored.
         * The capacity of the ArrayList is the length of this array buffer. Any
         * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
         * will be expanded to DEFAULT_CAPACITY when the first element is added.
         */
        transient Object[] elementData; // non-private to simplify nested class access
    

    它是一个对象类的数组。所以它可以存储任何对象,因为ArrayList类实现了泛型,所以如果ArrayList是用特定的类型创建的,那么很容易将这个对象转换为特定的类型