集合框架Set

Set集合

1.集合框架Set(HashSet哈希表存储、重复元素存储底层探究)

1.1
HashSet的特点(根据版本原因有些版本是有序的)
元素是无序(存入和取出的顺序不一定一致),元素不可以重复;
hashset本身具备去重的功能
1.2
重复元素存储底层探究
/**
* 返回值代表着容器中的具体的位置坐标
*/
@Override
public int hashCode() {

	return this.getName().hashCode()+this.age;//可以减少调用次数提高去重的效率
}
@Override

//当person这个人的名字相等,年龄相等,就存在集合中堆内存里的同一个引用地址
public boolean equals(Object obj) {

	if(obj instanceof Person) {
		Person p = (Person) obj;
		//this.name还没有
		//			p.getName()已经存进去了
		System.out.println(this.getName()+"equals"+ p.getName());
		return this.getName().equals(p.getName())&& this.getAge()==p.getAge();
	}
	return false;
}


@Override
public String toString() {
	// TODO Auto-generated method stub
	return "Person [name="+name+",age="+age+"]";
}

注意
HashSet是如何保证元素唯一性的呢?

是通过元素的两个方法:hashCode与equals方法来完成;

如果hashCode值相同,才会判断equals是否为true;

如果hashCode值不同,那么不会调用equals。

2、集合框架TreeSet(自然排序、比较器排序)

2.1 自然排序的用途
  • 使添加的元素自身具备排序规则,这种排序规则又被称为自然排序

在这里插入图片描述

在这里插入图片描述
易错点
如果只放一个元素,就汇报类型转换异常

2.2

按年龄排序
/**
 *正数:后面的0必当前(this)大
 *0代表相等
 */
@Override
public int compareTo(Person o) {
	int num = this.getAge() - o.getAge();
	if(num==0) {
		return this.getName().compareTo(o.getName());
	}
	return num;
}

}

2.3

比较器排序

比较器comparator接口的作用:
使得容器具有比较性

/**

  • 定义一个比较person的比较器
  • 规则:先按姓氏,再按年龄
  • 先主要条件再次要条件,如果不按这个规则来,那么就会数据丢失

*/

class PersonComp implements Comparator{
public int compare(Person o1, Person o2) {
int num = o1.getName().compareTo(o2.getName());
if(num==0) {
return o1.getAge() - o2.getAge();
}
return num;
}
}

3.泛型

3.1什么时候定义泛型类?

当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展,现在定义泛型来完成扩展
将运行时的异常转移到编译时期

3.2 泛型方法

泛型类定义的泛型,在整个类中有效,如果被方法调用,

那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

为了让不同方法可以操作不同的类型,而且类型还不确定。

那么可以将泛型定义在方法上。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值