分类: Java
2010-03-23 15:47:13
TestHashSet 类main函数:
public class TestHashSet {
public static void main(String [] agrs){
Set set = new HashSet();
//添加一个string数据
set.add("文本");
//添加一个整数数据
set.add(new Integer(5));
//添加一个付点数据
set.add(12.15);
//输出集合大小
System.out.println(set.size());
//在添加个相同的文本
set.add("文本");
//输出大小
System.out.println(set.size());
//添加个null值
set.add(null);
//输出集合大小
System.out.println(set.size());
//再添加个null值
set.add(null);
//输出集合大小
System.out.println(set.size());
//判断是否存在null值
System.out.println(set.contains(null));
// 删除null值
set.remove(null);
//判断是否存在null值
System.out.println(set.contains(null));
//输出集合大小
System.out.println(set.size());
Set set1 = new HashSet();
UserInfo user = new UserInfo("abc","123");
UserInfo user1 = new UserInfo("abc","123");
set1.add(user);
System.out.println(set1.size());
//判断是否存在user1这个对象
System.out.println(set1.contains(user1));
user.setName("xyz");
user.setPassword("aaa");
//在更改了user值后user1还存在吗?
System.out.println(set1.contains(user1));
}
}
UserInfo 类:
public class UserInfo {
private String name;
private String password;
private int HASHCODE= Integer.MIN_VALUE;
public UserInfo(String name,String password){
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int hashCode() {
if (HASHCODE == Integer.MIN_VALUE) {
// 重新生成本类的hashCode
HASHCODE = name.hashCode() + password.hashCode();
}
return HASHCODE;
}
//判断值是否相等
public boolean equals(Object obj) {
if(obj == null || !(obj instanceof UserInfo)){
return false;
}
UserInfo user = (UserInfo)obj;
return this.name == user.name && this.password == user.password;
}
} 1. HashSet允许null值。2. HashSet中值不能重复。
3. Hashset在判断是否存在同一个对象的时候首先会判断对象的hashcode是否相等,然后在判断对象的equals()是否相等。
4.它不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变;
5.此实现不是同步的。
//Set s = Collections.synchronizedSet(new HashSet(...));