【Android】ArrayList要素オブジェクトのソースコード解析をremoveで削除

1342 ワード

ArrayList要素オブジェクトを削除する方法のソースコードは以下の通りです.
@Override public boolean remove(Object object) {
        Object[] a = array;
        int s = size;
        if (object != null) {
            for (int i = 0; i < s; i++) {
                if (object.equals(a[i])) {
                    System.arraycopy(a, i + 1, a, i, --s - i);
                    a[s] = null;  // Prevent memory leak
                    size = s;
                    modCount++;
                    return true;
                }
            }
        } else {
            for (int i = 0; i < s; i++) {
                if (a[i] == null) {
                    System.arraycopy(a, i + 1, a, i, --s - i);
                    a[s] = null;  // Prevent memory leak
                    size = s;
                    modCount++;
                    return true;
                }
            }
        }
        return false;
    }

要素オブジェクトを削除する実際の手順は、次のとおりです.
入力された要素がnullでない場合、リスト内の要素を巡回し、要素の値がパラメータ内のオブジェクトと等しい場合、arrayCopy法により配列aを再構築し、配列がその要素から後の要素をすべて前に移動し、削除の目的を達成するとともに、新しいカラムテーブルsizeを設定します.
入力された要素がnullである場合、ループを介して、前述のような方法で最初のnull要素を削除します.
removeメソッドを呼び出すと、受信オブジェクトがequalsメソッドで判断したのと等しい最初の要素のみが削除されると結論できます.nullが入力されると、最初のnull要素が削除されます.
したがって、カスタムクラスがremoveメソッドを使用してリストから指定した値オブジェクトを削除する場合は、まずこのタイプの独自のequalsメソッドを実装します.