Java ArrayList удалить метод полиморфизм - PullRequest
4 голосов
/ 26 июля 2011

я использую ArrayList<Integer>, и я заметил, что есть два метода удаления:

тот, который унаследован от интерфейса List:

public boolean remove(Object o)

И один реализован в ArrayList:

public Object remove(int index)

В моем случае, когда я позвоню list.remove(2);, какой метод будет вызван? и почему? поскольку мой "объект" также является целым числом ...

Спасибо.

Ответы [ 3 ]

3 голосов
/ 26 июля 2011

Если вы вызываете метод следующим образом:

intList.remove(2);

второй элемент будет удален. Если вы вызываете метод следующим образом:

intList.remove(new Integer(2)));

объект 2 будет удален.

3 голосов
/ 26 июля 2011
public Object remove(int index)

будет вызван.

Поскольку вы звоните list.remove(2), параметр имеет тип int.Таким образом, метод с наиболее конкретным совпадающим значением получает вызов, в этом случае remove(int index) и значение в index будут удалены

1 голос
/ 26 июля 2011

Из JavaDocs на ArrayList.remove (Object obj):

Удаляет первое вхождение указанного элемента из этого списка, если он присутствует. Если список не содержит элемент, он без изменений. Более формально, удаляет элемент с самым низким индексом i такой, что (o == null? get (i) == null: o.equals (get (i))) (если такой элемент существует). Возвращает true, если этот список содержал указанное элемент (или эквивалентно, если этот список изменился в результате звоните).

Поскольку он использует o.equals (), он требует, чтобы содержащиеся в нем элементы были A) и объектом B) были бы равны аргументу remove ().

Вот пример для демонстрации.

/**
 * 
 */
package ksf;

import java.awt.List;
import java.util.ArrayList;

/**
 * @author Kelly French
 *
 */
public class ListRemove {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList l = new ArrayList();

        l.add(new Integer(0)); // to take up the zeroth spot
        l.add(new Integer(300)); // 1st added, position [1]
        l.add(new Integer(100)); // 2nd added, position [2]
        l.add(new Integer(200)); // 3rd added, position [3]

        // will remove whatever is at location 2, i.e. Integer(100)
        l.remove(2); 

        // will remove first object Integer(200) if it exists
        //  in this case it is the equivalent of l.remove(3);
        l.remove(new Integer(200));

        // will cause nothing to be removed
        l.remove(200); // no 200th element in the list
        l.remove(new Integer(2)); // no element passes o.equals()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...