集合类Set的两个子类的关系

一、Hashset
**在Hashset中如果要添加值,会默认比较这两个值的equals方法
如果通过比较相等,那么就不会添加(而是过滤)。
但是Student类是自己新写的类,所以默认调用它的equals方法实际上是调用它的父类(Object)的equals方法默认比较的是地址,这样会有重复值,所以要重写他的equals和hashcode方法
**

/**
		 * 不带范行取值,无序,没有下标,没有重复值(过滤)
		 */
//			Set set=new HashSet();
//			set.add(7);
//			set.add(2);
//			set.add(3);
//			set.add(4);
//			set.add(5);
//			set.add(6);
//			for (Object s : set) {
//				System.out.println(s);
//			}
		
		/**
		 * 带对象并且重写hashCode&&equals
		 */
//		Set<Student> set=new HashSet<Student>();	
//		set.add(new Student(1, "ls", "M"));
//		set.add(new Student(2, "ww", "F"));
//		set.add(new Student(3, "mz", "M"));
//		set.add(new Student(1, "ls", "M"));
		
//		System.out.println(set.size());
//		for (Student s : set) {
//			System.out.println(s);
//		}
		

二、TreeSet
规则1,实现 Serializable和元素Comparable<Student<>
实现里面的compareTO方法进行比较,compareTO里面传一个参是因为和当前类做比较

public class Student implements Serializable,Comparable<Student>
public int compareTo(Student o) {
		if (this.sid!=o.getSid()) {
			return this.sid-o.getSid();
		}
		else if(this.sname!=o.getSname()) {
			return this.sname.hashCode()-o.getSname().hashCode(); 
		}
		else {
			if (this.sex!=o.getSex()) {
				return this.sex.hashCode()-o.getSex().hashCode();
			}
		}
		return 0;
	}

       /**
		 * 实现 Serializable和元素Comparable<Student>
		 * 就可以进行排序(根据id排序)
		 */
//		Set<Student> set=new TreeSet<Student>();
//		set.add(new Student(1, "lc", "F"));
//		set.add(new Student(3, "ww", "M"));
//		set.add(new Student(2, "zs", "M"));
//		for (Student s : set) {
//			System.out.println(s);
//		}

规则2,compare里面两个参做比较

public class Test implements Serializable,Comparator<Student> {

	@Override
	public int compare(Student o1, Student o2) {
		if (!o1.equals(o2)) {
			return o1.compareTo(o2);
		}
		return 0;
	}
	
}
/**
		 * 重新new一个类去比较
		 */
//		Set<Student> set=new TreeSet<>(new Test());
//		set.add(new Student(1, "lc", "F"));
//		set.add(new Student(3, "ww", "M"));
//		set.add(new Student(2, "zs", "M"));
//		for (Student s : set) {
//			System.out.println(s);
//		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值