在java容器中remove方法原理

package TestCollection;
import java.util.ArrayList;
import java.util.Collection;

	public static void main(String[] args) {
Collection<Name> a = new ArrayList<Name>();
		a.add(new Name("王","东旭"));
		a.add(new Name("杨","炳哲"));
		
		a.remove(new Name("王","东旭"));
		}
}
class Name{
	private String firstName;
	private String lastName;
	
	public Name(){
		
	}
	
	public Name(String firstName,String lastName){
		this.firstName = firstName;
		this.lastName = lastName;
	}
	
	public boolean equals(Object other){
		if(other instanceof Name){
			Name otherName = (Name)other;
			return this.firstName == otherName.firstName && this.lastName == otherName.lastName;
		}
		return super.equals(other);
	}
	public String toString(){
		return firstName + " " + lastName;
	}
}

   容器不管哪一种都会implements Collection接口,在几乎每种容器中都是通过容器元素本身的equals方法判断是否相等,remove方法也是通过equals从头遍历找出相等的然后删除。

   可以发现如果容器元素未定义equals后,运行remove将无法删除元素,原因就是Collection自动调用了元素父类的equals方法进行比较,而在Object类中的equals方法

public boolean equals(Object obj){
return this == obj;

}

    显然是通过比较两个对象的地址,所以除非在容器中的元素有别处的引用,否则不会删除。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值