java - java中的数组是如何工作的,类的数据类型是什么意思?
问题描述
如果我们想将一个元素添加到一个预先存在的数组的末尾,请你向我解释一下它是如何正确完成的。
我很难理解 Littler 类,特别是 add 方法。
我知道“Puppy[] temp = new Puppy[this.puppies.length + 1];”
我们有一个新数组,它的长度比 puppies 数组(实例变量)大一。“temp[i] = this.puppies[i];” 根据索引将 puppies 数组中的所有元素分配给 temp。
我的困惑在于线路: temp[this.puppies.length] =puppy;
1.) 这里到底发生了什么?
在我看来,我认为我们正在将 this.puppies.length 的最后一个索引位置重新分配给 puppy 参数。
2.)将那个+1(大一号)制作出来,临时数组的额外索引就行了
“小狗 [] 温度 = 新小狗 [this.puppies.length + 1];”
保持空白?
3.) 是否“this.puppies = temp;” 代表浅拷贝?
4.) 制作更大的数组并添加对象的过程称为什么,我们是否每次都必须这样做(创建一个更大的数组)。
5.)如果我们不这样做会发生什么,是否存在我们不必做大或需要临时数组的情况?(我只是对我们为什么需要它感到困惑)。
6.) 类类型的对象是什么意思?"private Puppy[] 小狗;" 是什么意思?究竟是什么意思?
7.) 请你帮我破译这段代码,以便我理解。特别是假设 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[this.puppies.length] = 小狗
这会将某个对象 ( )的引用存储为数组的最后一个元素。(因为 的长度是)Puppy
puppy
temp
puppies.length + 1
那个+1(大一号)会不会,行[..]上的临时数组的额外索引保持空白
不,上述分配是对最后一个元素进行的,因为数组使用基于 0 的索引。
是否“this.puppies = temp;” 代表浅拷贝?
没有创建新对象。赋值后,两个变量this.puppies
和 Puppy 数组 ( temp
) 都指向堆上的同一个对象。
这个制作更大的数组并添加对象的过程叫什么,我们是否每次都必须这样做(创建一个更大的数组)。
对此没有通用名称。在这里完成向数组添加一个新元素。通常,为了避免这种情况(通常),将创建一个大小为两倍的新数组。
如果我们不这样做会发生什么,是否存在我们不必做大或需要临时数组的情况?(我只是对我们为什么需要它感到困惑)。
由于数组无法调整大小,因此如果要添加新对象,则必须创建更大的数组。
类类型的对象是什么意思?"private Puppy[] 小狗;" 是什么意思?究竟是什么意思?
puppies
是一个包含对象数组的Puppy
对象。请你能帮我破译这段代码,以便我理解。特别是假设 this.values.length 是一个大小为 5 个元素(索引 0-4)的数组。
这个方法是在现有的 Puppy 上添加一个新的 Puppy。由于数组不能动态调整大小,它会创建一个新数组(temp
)并添加所有现有的小狗。为了容纳新的小狗,创建的数组大小比现有小狗大一。然后,它将传递的 Puppy 实例添加为数组的最后一个元素。最后一行this.puppies = temp
将创建的数组的引用分配给指向小狗数组的实例变量。
推荐阅读
- django - 如何修复 Django API 中的“`.create()` 方法默认不支持可写嵌套字段”
- c++ - Error in c++: "terminate called after throwing an instance of 'std::length_error' what(): basic_string::_M_replace_aux"
- sql - 在 oracle sql 中执行涉及连接的更新语句
- javascript - Redux 调度问题(意外滚动)
- python - 获取每列最新的非 NA 值
- python - 如果我想忽略小值,如何以内存有效的方式乘以更大、更密集的 scipy.sparse 矩阵?
- python - 替换后如何在sympy中设置0,高于0
- java - 带有 Android Studio 的 Retrofit2:无法获得加油站的阵列
- django - 如何始终在 python django rest 框架中收听 amazon sqs
- angular - Angular 9 - 生成空的伊斯坦布尔测试覆盖率报告