1. 何为重复的元素?
HashSet类中的 Set是一种不含重复元素的容器,类似数学中的集合概念。
Set 中没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2
2 .如何保证元素的唯一性?
比如,调用HashSet向该 set 中添加指定的元素 e 时,
如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。
3. equals() 与 == 有何区别?
equals() 判断两个对象是否“相等”
可以叫做对象值相等,一般要根据两个对象的内容来判断。
而 == 则不同,它仅判断两个变量是否引用了同一个对象,即“引用相等”
4.什么情况下必须改写 equals() ?
简单说就是要让 equals() 表达不同于== (引用相等)的“值相等”的含义时。
代码:
public class SetTest {
public static void main(String[] args) {
Set<Dog> dogHouse=new HashSet<Dog>();
Dog dahuang=new Dog("大黄",2,"黄色的","公狗");
Dog huahua=new Dog("花花",4,"红色的","母狗");
Dog xixi=new Dog("西西",3,"白色的","公狗");
Dog dahuangdi=new Dog("大黄",2,"黄色的","公狗");
// dahuangdi与dahuang实体内容相等,但是引用不相等
Dog dahuangxiong=dahuangdi;//大黄弟弟和哥哥的引用是相等的
dogHouse.add(huahua);
dogHouse.add(dahuang);
//dogHouse.add(dahuangdi);
dogHouse.add(xixi);
boolean result1=dogHouse.add(dahuangdi);
System.out.println("dahuangdi是否添加入集合?:");
System.out.println(result1);//看看是否添加进去了
boolean result2=dogHouse.add(dahuangxiong);//结果是false
System.out.println("dahuangxiong是否添加入集合?:");
System.out.println(result2);//看看是否添加进去了
//验证引用相等性
System.out.println("dahuang的hashCode是:");
System.out.println(dahuang.hashCode());
System.out.println("dahuangdi的hashCode是:");
System.out.println(dahuangdi.hashCode());
System.out.println("dahuangxiong的hashCode是:");
System.out.println(dahuangxiong.hashCode());
System.out.println("dahuangxiong与dahuangdi的hashcode()是否相等");
System.out.println(dahuangxiong.hashCode()==dahuangdi.hashCode());
//dahuangxiong与dahuangdi的哈希码比较结果true
System.out.println("dahuang与dahuangdi的hashcode()是否相等");
System.out.println(dahuang.hashCode()==dahuangdi.hashCode());
//dahuang与dahuangdi的哈希码比较结果false
Iterator<Dog> iterator=dogHouse.iterator();
while(iterator.hasNext()){
(iterator.next()).bark();
}
}
}
Set<Dog> dogHouse=new HashSet<Dog>();
Dog dahuang=new Dog("大黄",2,"黄色的","公狗");
Dog huahua=new Dog("花花",4,"红色的","母狗");
Dog xixi=new Dog("西西",3,"白色的","公狗");
Dog dahuangdi=new Dog("大黄",2,"黄色的","公狗");
// dahuangdi与dahuang实体内容相等,但是引用不相等
Dog dahuangxiong=dahuangdi;//大黄弟弟和哥哥的引用是相等的
dogHouse.add(huahua);
dogHouse.add(dahuang);
//dogHouse.add(dahuangdi);
dogHouse.add(xixi);
boolean result1=dogHouse.add(dahuangdi);
System.out.println("dahuangdi是否添加入集合?:");
System.out.println(result1);//看看是否添加进去了
boolean result2=dogHouse.add(dahuangxiong);//结果是false
System.out.println("dahuangxiong是否添加入集合?:");
System.out.println(result2);//看看是否添加进去了
//验证引用相等性
System.out.println("dahuang的hashCode是:");
System.out.println(dahuang.hashCode());
System.out.println("dahuangdi的hashCode是:");
System.out.println(dahuangdi.hashCode());
System.out.println("dahuangxiong的hashCode是:");
System.out.println(dahuangxiong.hashCode());
System.out.println("dahuangxiong与dahuangdi的hashcode()是否相等");
System.out.println(dahuangxiong.hashCode()==dahuangdi.hashCode());
//dahuangxiong与dahuangdi的哈希码比较结果true
System.out.println("dahuang与dahuangdi的hashcode()是否相等");
System.out.println(dahuang.hashCode()==dahuangdi.hashCode());
//dahuang与dahuangdi的哈希码比较结果false
Iterator<Dog> iterator=dogHouse.iterator();
while(iterator.hasNext()){
(iterator.next()).bark();
}
}
}
class Dog {
private String name;// 名字
private int age;// 年龄
private String furColor;// 毛色
private String xingbie;// 性别
private String name;// 名字
private int age;// 年龄
private String furColor;// 毛色
private String xingbie;// 性别
public Dog(String name, int age, String furColor, String xingbie) {
super();
this.name = name;
this.age = age;
this.furColor = furColor;
this.xingbie = xingbie;
}
super();
this.name = name;
this.age = age;
this.furColor = furColor;
this.xingbie = xingbie;
}
public String getXingbie() {
return xingbie;
}
return xingbie;
}
public void setXingbie(String xingbie) {
this.xingbie = xingbie;
}
this.xingbie = xingbie;
}
public String getName() {
return name;
}
return name;
}
public void setName(String name) {
this.name = name;
}
this.name = name;
}
public int getAge() {
return age;
}
return age;
}
public void setAge(int age) {
this.age = age;
}
this.age = age;
}
public String getFurColor() {
return furColor;
}
return furColor;
}
public void setFurColor(String furColor) {
this.furColor = furColor;
}
this.furColor = furColor;
}
public void bark() {
System.out.println("我是一只" + getFurColor() + getXingbie() + "小狗,我的名字"+ getName() + "我" + getAge() + "岁了");
}
System.out.println("我是一只" + getFurColor() + getXingbie() + "小狗,我的名字"+ getName() + "我" + getAge() + "岁了");
}
}