列表接口-Java

列表接口-Java,java,arrays,list,Java,Arrays,List,我正在使用下面的代码。list接口指定两个重载的remove()方法。如果我们在列表中调用remove(3),我不知道如何确定Java使用哪一个。我们怎样才能强迫Java使用另一个呢 public class ArrayList<E> implements List1<E> { private E[] data; private int size; public ArrayList(){ data = (E[]) (new Ob

我正在使用下面的代码。list接口指定两个重载的remove()方法。如果我们在列表中调用remove(3),我不知道如何确定Java使用哪一个。我们怎样才能强迫Java使用另一个呢

public class ArrayList<E> implements List1<E> {

    private E[] data;
    private int size;

    public ArrayList(){
        data = (E[]) (new Object[1]);
        size = 0;
    }

    public void add(E target) {
        if (isFull()) {
            stretch();
        }
        data[size] = target;
        size++;
    }

    public boolean isEmpty() {
        return size == 0;
    }

    protected boolean isFull() {
        return size == data.length;
    }

    public E get(int index) {
        return data[index];
    }

    public void set(int index, E target) {
        data[index] = target;
    }

    public int size() {
        return size;
    }

    protected void stretch() {
        E[] newData = (E[]) (new Object[data.length * 2]);
        for (int i = 0; i < data.length; i++) {
            newData[i] = data[i];
        }
        data = newData;
    }


    public boolean contains(E target) {
        for (int i = 0; i < size; i++) {
            if (data[i].equals(target)) {
                return true;
            }
        }
        return false;
    }

    public String toString() {
        String result = "[";
        for (int i = 0; i < size; i++) {
            result += data[i] + "";
        }
        return result + "]";
    }

    public E remove(int index) {
        E result = data[index];
        for (int i = index; i < size; i++) {
            data[i - 1] = data[i];
        }
        size--;
        return result;
    }

    public boolean remove(E target) {
        for (int i = 0; i < size; i++) {
            if (data[i].equals(target)){
            }
            size--;
            return true;
        }
        return false;
    }

    public static interface List1<E> {

        public void add(E target);
        public boolean contains(E traget);
        public E get(int index);
        public boolean isEmpty();
        public E remove(int index);
        public boolean remove(E index);
        public void set(int index, E target);
        public int size();
    }
}
公共类ArrayList实现了List1{
私人电子数据;
私有整数大小;
公共数组列表(){
数据=(E[])(新对象[1]);
尺寸=0;
}
公共无效添加(E目标){
如果(isFull()){
拉伸();
}
数据[大小]=目标;
大小++;
}
公共布尔值为空(){
返回大小==0;
}
受保护的布尔值isFull(){
返回大小==data.length;
}
公共E-get(int索引){
返回数据[索引];
}
公共无效集(整数索引,E目标){
数据[索引]=目标;
}
公共整数大小(){
返回大小;
}
受保护的空拉伸(){
E[]newData=(E[])(新对象[data.length*2]);
对于(int i=0;i
您有两个
remove()
函数,它们具有不同的返回数据类型和不同的函数重载数据类型。因此,
Java
将能够根据这些参数区分这些函数,从而选择适当的调用函数。您不能仅强制
Java
使用另一个,除非您希望从第一个显式调用它,如下所示:

remove(datatype1 var1) {
    remove(var2); //datatype2 of var2
    //your code
}

remove(datatype2 var) {
    //your code
}

若您看到这两个remove方法,很明显一个方法获取列表中对象的索引,而另一个方法获取要删除的对象。对象是列表类型的对象。因此,如果要使用另一个,只需传递arrayList包含的对象。例如:

如果列表包含整数:

List<Foo> integerList = new ArrayList<Foo>();
Foo foo = new Foo();
Foo foo1 = new Foo();
integerList.add(foo);
integerList.add(foo1);
integerList.remove(foo);//remove 1
integerList.remove(0);//remove 2
List integerList=new ArrayList();
Foo-Foo=新的Foo();
Foo foo1=新的Foo();
integerList.add(foo);
integerList.add(foo1);
integerList.remove(foo)//删除1
整数列表。删除(0)//删除2

在上面的remove1调用中,将调用方法remove(E target),另一方面,在remove2调用中,将调用方法remove(int index)。

'3'是一个未绑定的整数。我相信你可以做一些类似于
remove(新整数(3))
调用第二个remove方法。可能是因为3是int no?@AdamDiStefano no,这是因为重载值的引用来自整数引用,而不仅仅是因为它是一个数字。它仍然能够区分相同数量的不同数据类型。例如,如果调用
remove(3)
,它将作为
int
传递,如果调用
remove(3f)
,它将作为
double
传递。请记住,您必须为这两个调用定义两个不同的
remove()
函数。