没有String对象的情况下,String的indexOf(String obj)方法如何工作?

时间:2019-10-03 15:54:17

标签: java generics

我正在学习如何制作动态数组。我知道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-这与泛型有关吗?如果是,请提供一些链接,以便我对此进行自我教育。

3 个答案:

答案 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以了解如何比较通用对象