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