集合框架 (整理自用)

Collection(单列集合)与MAP(双列集合)

Collection框架图

在这里插入图片描述
lambda表达式实现foreach循环遍历
在这里插入图片描述

ArrayList扩容机制

在这里插入图片描述

LinkList

在这里插入图片描述

HashSet

HashSet扩容
在这里插入图片描述
在这里插入图片描述

##
LinkedHashSet
在这里插入图片描述

MAP

Map的遍历
在这里插入图片描述

  • 键找值:通过map提供的map.keySet()方法获取到Map集合中的所有键,然后通过循环通过key找到所有的value
  • 键值对:通过map提供的map.entrySet方法,将map的键值对封装成一个,放入到Set集合当中,通过遍历集合来遍历Set
  • Lambda表达式:通过Lambda表达式来遍历集合map在这里插入图片描述

HashMap的底层实现原理

HashMap的源码的几个参数

  • loadFactor:负载因子,默认大小为0.75,表述hashMap的填充度
  • threshold:容纳键值对的临界值,当超过临界值时需要扩容,计算公式map的数组长度*loadFactor
  • size:map中键值对的数量
  • Ini_capacity:初始容量,默认为16
    HashMap底层实现是数组+链表++红黑树(JDK1.8后),其中当链表的长度大于8并且数组长度大于64时,链表转化成红黑树(性能优化,增加查找速度;),当红黑树节点小于6时,红黑树变为链表。
    HaspMap是线程不安全的,如果存在线程安全问题应该使用ConCurrentHashMap;

HashCode

HashMap中通过对Key的hashCode()运算得到该键值对存放的下标,对于同一个key通过hashCode运算得到的值是相同的,然后经过equals()对比,没有相同的就插入到链表中。但是对于自定义的对象(HashMap<Student,String>),当两个对象的内容相同时,hashCode对他们两个运算不会得到相同的hash值,因为他们两个地址不同,这就需要再自定义类中重写hashCode()和equals()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值