Set 二(TreeSet与HashSet)十五

import java.util.HashSet;
import java.util.Set;




/**
 *      set
 *   /       \
 * HashSet  TreeSet 
 * 1.HashSet 存储元素必须重写hashCode()与equals()方法,我们似乎没关心过;元素不重复
 * HashSet底层实现是HashMap,HashMap的底层实现是:数组+链表,其存储元素分
 *   2步:
 *   1)判断hashCode()  如果相等  2)再判断equals()
 *   靠1)2)保证去重,如果不重写上面2个方法,你试试就知道了。。。。。
 * 2.TreeSet 存储元素可以排序,返回0去重
 *   1)排序元素类必须实现java.util.lang.Comparable,重写comparaTo()方法。
 *    提供空构造  new TreeSet()
 *   2)提供另外的排序业务类,实现java.util.lang.Comparator,重写compare
 *    new TreeSet(Comparator<? super E> comparator)
 */
public class HashSetTest2 {
public static void main(String[] args) {
//元素本身实现java.util.lang.Comparable 的comparaTo
Person1 p1=new Person1("张三","41042519800308353");
Person1 p2=new Person1("张三","41042519800308353");
Set<Person1> set1=new HashSet<Person1>();
set1.add(p1);
set1.add(p2);
System.out.println(set1);
//结果:[Person:姓名:张三,年龄:41042519800308353,Person:姓名:张三,年龄:41042519800308353] 
//。自然社会中,这个是一个人
System.out.println("==========================");
Set<Person11> set11=new HashSet<Person11>();
Person11 p11=new Person11("张三","41042519800308353");
Person11 p12=new Person11("张三","41042519800308353");
set11.add(p11);
set11.add(p12);
System.out.println(set11);
//结果:[Person:姓名:张三,年龄:41042519800308353]
}
}


//==========不重写hashCode()与equals()方法============================
class Person1  {
private String name;
private String id;//身份证
public Person1() {
}
public Person1(String name, String id) {
super();
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "Person:姓名:"+this.name+",年龄:"+this.id;
}
}
//============重写hashCode()与equals()方法====================
class Person11  {
private String name;
private String id;//身份证

public Person11() {
}
public Person11(String name, String id) {
super();
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "Person:姓名:"+this.name+",年龄:"+this.id;
}
@Override
public int hashCode() {
return this.id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person11) { //
Person11 p = (Person11) obj;
return (name.equals(p.name) && id == p.id);
}
return super.equals(obj);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值