remove源码
ArrayList集合底层存储结构是数组,所以ArrayList中的remove删除方法,其实就是数组的删除
源码:
public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; }
执行方式:当传的参数是null走上面的分支,不是null走下面else的分支
不是null遍历时,遍历中比较使用的是equals方法:
public boolean equals(Object obj) { return (this == obj); }
String类型比较的是内容是否相同,
List<String> names= new ArrayList<String>(); names.add("Tom"); names.add("Tin"); names.remove(null); System.out.println(names.remove(null)); System.out.println(names.remove("Tom")); System.out.println(names.size());
执行结果: false true 1
因为传入的参数为null,而names列表中没有,所有没有删除成功,而“Tom”在names列表中删除成功
参数调用o.equals()方法,实际上是多态,在这里真正调用的是String里的equals 源码如下:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n &