java容器

import java.util.*;

public class BasicContainer {
public static void main(String[] args) {
Collection c = new HashSet();
c.add("hello");
c.add(new Name("f1","l1"));
c.add(new Integer(100));
c.remove("hello"); //c.remove中的hello对象必须和c.add中的hello 对象是否equals() 只有两个对象equals才可以被去除
c.remove(new Integer(100));
System.out.println
(c.remove(new Name("f1","l1"))); //这里返回false 因为name类中没有重写equals方法,所以调用的是父类的equals的方法,所以比较的是两个对象的地址和==是一样的,所以不相等,两个对象不equals
System.out.println(c);
}


}
/**
* Object 的equals方法 和 == 比较的是一样的,比较两个对象是否相等。
* 如果两个对象equals,那么他们的hashCode也相等
*容器类对象在调用remove,contains 等方法时需要比较对象是否相等(比较时主要用的equals()方法,但是有的时候也会用hashCode(),当这个对象用在Map接口里面,作为键使用的时候会使用hashCode(),因为hashCode()方法的效率会更高),这会涉及到对象类*型的equals方法和hashCode方法,对于自定义的类型,需要重写equals和hashCode方法*以实现自定义的对象的相等规则。
*
* 注意:相等的对象应该具有相等的hashCode( 通过hashCode可以找到内存中的地址,不是绝对的物理地址,所以hashCode适合做索引)
*
*两个对象之间相互equals,所以两个对象的hashCode必须相等
*/
class Name implements Comparable {
private String firstName,lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName; this.lastName = lastName;
}
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public String toString() { return firstName + " " + lastName; }

public boolean equals(Object obj) {
if (obj instanceof Name) {
Name name = (Name) obj;
return (firstName.equals(name.firstName))
&& (lastName.equals(name.lastName));
}
return super.equals(obj);
}

public int hashCode() {
return firstName.hashCode(); //两个方法equals所以firstName一定相等,所以firstName.hashCode()也一定相等。此处调用的是String类提供的hashCode();

}



public int compareTo(Object o) {
Name n = (Name)o;
int lastCmp =
lastName.compareTo(n.lastName);
return
(lastCmp!=0 ? lastCmp :
firstName.compareTo(n.firstName));
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值