涉及的知识:
- 包装类型的自动装箱拆箱
自动装箱触发条件:当基本类型给对应的包装类型变量赋值时触发
自动拆箱出发条件:当包装类型给对应的基本类型赋值时或者包装类型参与运算时触发 - 方法的重载
方法的重载的条件:同类下方法同名但是参数列表参数类型不同或参数数目不同或参数顺序不同 - 重载方法匹配优先度顺序
①直接匹配到的类型 > ②自动类型转换 > ③自动装箱 > ④匹配接口实现 > ⑤匹配父类 > ⑥匹配变长参数
前几天模拟实现简陋的ArrayList时,写到remove方法时,重载方法remove(int i)和remove(Objec i)出现了问题
remove(int i):功能实现按索引号删除数据元素
remove(Objec i):功能实现按数据元素内容删除
问题出现条件:
当ArrayList中存储的为int类型数据时,但是想按数据元素内容删除时,remove(Objec i)就会失去作用,系统始终调用remove(int i)
public interface List {
//返回线性表的长度
public int size();
//返回线性表中序号为i的数据元素
public Object get(int i);
//线性表如果为空返回turn否则返回false
public boolean isEmpty();
//判断线性表是否包含元素e
public boolean contains(Object e);
//返回数据元素e在线性表中的索引
public int indexOf(Object e);
//将数据元素e插入到线性表的指定位置
public void add(int i,Object e);
//将数据元素e插入到线性表的末尾
public void add(Object e);
//将数据元素e插入到指定元素obj之前
public boolean addBefore(Object obj,Object e);
//将数据元素e插入到指定元素obj之后
public boolean addAfter(Object obj,Object e);
//删除线性表中索引为i的元素,并返回
public Object remove(int i);
//删除线性表中第一个元素为e的元素
public boolean remove(Object e);
//将线性表中索引为i的数据元素替换为数据元素e,返回原数据元素
public Object replace(Object e);
}
/*
* 顺序表
* 底层采用数组
* 但是长度可以动态的变化
* */
public class ArrayList implements List {
private Object[] elementData;//底层是一个数组,还未确定长度
private int size; //不是数组长度,是元素个数
public ArrayList() {
this(4);
}
public ArrayList(int initialCapacity) {
//initialCapacity 为顺序表初始表长