-------android培训、java培训、期待与您交流! ----------
»知识点总结
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
Set集合的功能和Collection是一致的。
⊙ 代码练习
public static void main(String[] args)
{
HashSet set = new HashSet();
set.add(1);
set.add(2);
set.add(3);
set.add(3);
A.print(set);
HashSet<Person> hp = new HashSet<Person>();
hp.add(new Person("w1", 10));
hp.add(new Person("w2", 20));
hp.add(new Person("w1", 10));
A.print(hp.toString());//hp.toString();
}
}
/*
* 往hashSet集合中存入自定对象
姓名和年龄相同为同一个人,重复元素
* */
class Person
{
private String name;
private int age;
@Override
public String toString()
{
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode()//若hashCode的值相等,則與其進行equals比較
{
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
//return 60;
}
@Override
public boolean equals(Object obj)
{
if(!(obj instanceof Person)) return false;
Person p = (Person)obj;
A.print(this.name+"-->"+p.name);
return this.name==p.name && this.age==p.age;
}
public Person(String name, int age)
{
super();
this.name = name;
this.age = age;
}
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
}