我正在学习如何制作动态数组。我知道Collection API中有内置类,但我只是想了解它在幕后的实际工作方式。我从这里https://github.com/williamfiset/data-structures/blob/master/com/williamfiset/datastructures/dynamicarray/DynamicArray.java提取了全部代码。
这是一个通用类,该类中的一种方法对我来说没有意义
public boolean remove(Object obj) {
int index = indexOf(obj);
if (index == -1) return false;
removeAt(index);
return true;
}
上述方法检查给定对象是否在数组中,然后调用removeAt()方法,该方法将创建一个没有该对象的新数组,或者如果该对象根本不存在,则返回false。 >
1-此处的indexOf()方法如何在不使用String对象的情况下正常工作,并且不对数组进行迭代。
2-这与泛型有关吗?如果是,请提供一些链接,以便我对此进行自我教育。
答案 0 :(得分:0)
它使用DynamicArray的indexOf()函数,它确实对数组进行迭代。您不必为此使用String。它的作用是看是否将数组.equals()中的对象传递给indexOf()函数。如果是,则返回索引。
答案 1 :(得分:0)
您所键入的代码确实确实使用了generics。该类定义为DynamicArray<T>
,其中<T>
部分是对象的类型。
因此DynamicArray<String>
存储String
,而DynamicArray<Integer>
存储Integer
。
无论如何,indexOf()
本身并不使用泛型,它只是遍历数组,使用equals
寻找合适的对象:
public int indexOf(Object obj) {
for (int i = 0; i < len; i++) {
if (obj == null) {
if (arr[i] == null) return i;
} else {
if (obj.equals(arr[i])) return i;
}
}
return -1;
}
如果DynamicArray
包含String
,则该equals
呼叫将转到String.equals
。
答案 2 :(得分:0)
indexOf在数组中查找相等的对象,并返回数组中的索引,如您所见https://github.com/williamfiset/data-structures/blob/068c10624abab4568433f047fd7be3f24fb40d2a/com/williamfiset/datastructures/dynamicarray/DynamicArray.java#L80
public int indexOf(Object obj) {
for (int i = 0; i < len; i++) {
if (obj == null) {
if (arr[i] == null) return i;
} else {
if (obj.equals(arr[i])) return i;
}
}
return -1;
}
如果在数组中找不到搜索到的对象,则IndeOf返回-1。
如果您不想使用本机类型,请参见Overriding hashCode() and equals() methods以了解如何比较通用对象