2021-04-13

散列

1.集合

1.1Set
无序,不可重复
TreeSet:底层是红黑树;
HashSet:底层是散列
1.2底层实现
所以 HashSet 其实就是HashMap,只不过在set中,把map的value部分给屏蔽了
只对外提供key的操作
1.3使用
Set set = new HashSet();
set.add(1);
set.add(“xx”);
set.add(1);
System.out.println();

2.Map

2.1散列表概述
Hash算法 : 是一种安全的加密算法,把不定长的输入变成定长输出,并不能保证其唯一性
同一个对象生成多次hash值,一定是相同的值,不同对象有可能生成相同的hash值

算法 :
直接寻址法、数字分析法、除留余数法、平方取中法

在java中 把散列表封装到了HashMap和HashTable中,并且HashTable已经过时
Hash算法,在java中就是指hashCode方法
2.2底层实现
map特性 无序 , key不可重复,value可重复 , 保存键值队映射关系,通过key就可以找到对应的value(比如 橘子 买了4斤 )
map数据结构,数组中保存链表,链表是个单向链表( 值(Entry对象) , 下一个节点 , hash值)
既然是键值对,那么 这个映射关系由谁来维护呢? Map.Entry
本质 就是 Node<K,V>[];
添加过程 :
先使用要存储的映射关系的key对象调用key对象的hashCode方法,生成hash值,然后通过hash算法进行hash,得到数组下标
判断该下标上是否有元素,没有就创建一个Node对象,把hash,key,value存储,并且next是null,把该Node对象保存到数组对应的下标上
如果该数组位上有节点对象,此时调用当前要添加的映射关系的key的equals方法,和当前数组位上所有 节点对象的key进行比较(比较key的equals和hash)
如果有相等的,就用要添加的键值对的value值替换原来的键值对中的value值,并且key既然重复,不添加
如果没有相等的,就把该键值对封装Node对象,并保存到该数组对应的链表中的尾部,原来的尾部节点对象中的next 保存添加的这个新的Node对象
1.8开始,为了左右平衡,查询效率高,又引入了树
并且在添加中会进行判断,如果数组为中的Node个数 大于等于7 就把该数组位中的所有节点都转换TreeNode,以树状存储
HashMap 默认初始化容量是16,并且默认加载因子是0.75
2.3使用
map.put(“a”,2);
map.put(“a”,1);
2.4常用方法
Object put(Object key, Object value);
void clear();
int size
boolean isEmpty()
Object get(Object key):根据key获取value
Collection values():获取所有的value,返回集合
boolean containsKey(Object value):判断是否包含某个key
boolean containsValue(Object value):判断是否包含某个value
Set KeySet():把map中的所有key取出,以set形式返回
V remove(Object key):根据key删除映射,返回value值
map不能直接遍历
2.5map遍历
Map不能直接遍历,需要先转换为集合,然后再使用get方法,获取value
**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值