java中的数组是如何工作的?类的数据类型是什么意思?

java中的数组是如何工作的?类的数据类型是什么意思?,java,arrays,object,types,Java,Arrays,Object,Types,请你解释一下,如果我们想在一个已经存在的数组的末尾添加一个元素,那么它是如何正确完成的 我很难理解Littler类,特别是add方法 我知道Puppy[]temp=新的Puppy[this.puppies.length+1] 我们有一个新数组,它的长度比puppies数组实例变量大一倍。temp[i]=这个。小狗[i];根据索引将puppies数组中的所有元素分配给temp 我的困惑在于:temp[this.puppies.length]=puppy 一,。这里到底发生了什么 在我看来,我认为我

请你解释一下,如果我们想在一个已经存在的数组的末尾添加一个元素,那么它是如何正确完成的

我很难理解Littler类,特别是add方法

我知道Puppy[]temp=新的Puppy[this.puppies.length+1]

我们有一个新数组,它的长度比puppies数组实例变量大一倍。temp[i]=这个。小狗[i];根据索引将puppies数组中的所有元素分配给temp

我的困惑在于:temp[this.puppies.length]=puppy

一,。这里到底发生了什么

在我看来,我认为我们正在将this.puppies.length的最后一个索引位置重新指定给puppy参数

二,。那+1会比所做的大一个大小吗,即行上临时数组的额外索引

小狗[]温度=新小狗[this.puppies.length+1]

保持空白

三,。这样做。小狗=温度;代表一个肤浅的副本

四,。制作一个更大的数组并添加一个对象的过程叫什么,每次创建一个更大的数组时我们都必须这样做吗

五,。如果我们不这样做,会发生什么情况?是否存在这样的情况:我们不必使一个更大,或者不需要临时阵列?我只是不明白我们为什么需要它

六,。类类型的对象是什么意思?什么是私人小狗[]小狗;确切的意思是

七,。请你帮我破译一下这个密码好让我明白。特别是在假设的示例中,如果this.values.length是一个大小为5个元素的数组,索引为0-4

//Class where add actions taking place
public class Litter {
    private Puppy[] puppies;

    public Litter() {
        this.puppies = new Puppy[0];
    }
    public void add(Puppy puppy) {
        Puppy[] temp = new Puppy[this.puppies.length + 1];
        for (int i = 0; i < puppies.length; i++) {
            temp[i] = this.puppies[i];
        }
        temp[this.puppies.length] = puppy;
        this.puppies = temp; 
    }
}

首先也是最重要的-数组索引是基于0的。如果数组大小为10,则有效的数组索引为0到9

temp[此小狗长度]=小狗

这会将对某个Puppy对象Puppy的引用存储为数组的最后一个元素。因为temp的长度是puppies.length+1

如果+1比原来的大一个,那么第[…]行上临时数组的额外索引将保持为空

否。由于数组使用基于0的索引,因此上述分配是对最后一个元素进行的

这样做。小狗=温度;代表一个肤浅的副本

不创建新对象。赋值之后,两个变量this.puppies和Puppy数组temp都指向堆上的同一个对象

制作一个更大的数组并添加一个对象的过程叫什么,每次创建一个更大的数组时我们都必须这样做吗

这个没有通用名称。这里是为了向数组中添加新元素。通常,为了避免这种情况,会创建一个新的数组,其大小是原来的两倍

如果我们不这样做,会发生什么情况?是否存在这样的情况:我们不必使一个更大,或者不需要临时阵列?我只是不明白我们为什么需要它

由于数组无法调整大小,如果要添加新对象,必须创建更大的数组

类类型的对象是什么意思?什么是私人小狗[]小狗;确切的意思是? puppies是一个包含一系列Puppy对象的对象

请你帮我破译一下这个密码好让我明白。特别是在假设的示例中,如果this.values.length是一个大小为5个元素的数组,索引为0-4

//Class where add actions taking place
public class Litter {
    private Puppy[] puppies;

    public Litter() {
        this.puppies = new Puppy[0];
    }
    public void add(Puppy puppy) {
        Puppy[] temp = new Puppy[this.puppies.length + 1];
        for (int i = 0; i < puppies.length; i++) {
            temp[i] = this.puppies[i];
        }
        temp[this.puppies.length] = puppy;
        this.puppies = temp; 
    }
}

此方法是在现有小狗的基础上添加新的小狗。由于阵列无法动态调整大小,因此它会创建一个新的arraytemp并添加所有现有的幼犬。为了容纳新的小狗,创建的阵列大小比现有小狗大一倍。然后,它添加传递的Puppy实例作为数组的最后一个元素。最后一行this.puppies=temp将所创建数组的引用指定给指向puppies数组的实例变量。

接下来是@user7对问题4和5的回答,向数组中添加超出其原始大小的额外元素需要创建一个新数组,然后迭代将值从旧数组复制到新数组。这是一个真正的难题,也是我们通常使用ArrayList这样的类的一个主要原因,在这样的类中,我们可以简单地在末尾添加新元素,而无需任何麻烦。