Set系列Hashset

1.无序:存取顺序不一样

2.不重复:可以去除重复

3.无索引:没有带索引的方法,所以不能使用普通for需变换遍历,也不能通过索引

多种遍历方式

//1.创建一个Set集合的对象
Set<String>s=new HashSet<>();

//2.添加元素
s.add("a");
s.add("b");
s.add("c");

//遍历
//1.迭代器
Iterator<String>it=s.iterator();
while(it.hasNext()){
    System.out.print(it.next()+" ");
}
System.out.println();

//2.增加for
for(String it1:s){
    System.out.print(it1+" ");
}
System.out.println();

//3.Lambda
s.forEach(it2->System.out.print(it2+" "));
System.out.println();

Set集合的实现类特点

HashSet: 无序,不重复,无索引

LinkedHashSet: 有序,不重复,无索引

TreeSet: 可排序,不重复,无索引

HashSet底层原理:

hashSet集合底层采取哈希表存储数据

哈希表是一种对于增删改查数据性能比较好的结构

哈希值

1.如果没有重写hashCode方法,不同对象计算出的哈希值是不同的

2.如果已经重写hashCode方法,不同的对象只要属性值相同,计算出的哈希值就是一样大的

3.但是小部分情况下,不同的属性值或者不同的地址值计算出来的哈希值也有可能一样

JDK8以前的底层原理

1.创建一个默认长度16,默认加载·因为0.75的数组,数组名为table

2.根据元素的哈希值跟数组的长度计算出应存入的位置   int index= (数组长度-1)&哈希值

3.判断当前位置是否为null,如果是null直接存入

4.如果位置不为null,表示有元素,则调用equals方法比较属性值 如果集合中存储的是自定义对象,必须重写hashCode和equals

5.一样:不存   不一样:存入数组,形成链表

JDK8以后和以前的区别在于5

以前新元素存入数组,老元素挂在新元素的下面

以后,新元素直接挂在老元素下面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值