Day 20补充 map

Map接口(hashMap面试题)

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

注意:不再是add 之类的了 类似于list的用法

概念:
由一系列键值对组成的集合,提供了key-value的映射,它并没有继承collection。

特点

  1. key -value 有一一对应的关系,一个key对应一个唯一的值。
  2. 因为map的键采用set来存放,所以说键不能重复。value可以一样
  3. HashMap和TreeMap。 Hashmap采用了hash算法,TreeMap采用了树结构(红黑)
  4. 如果将map的所有key放在一起,那就是一个set集合。key可能有顺序,可能没顺序。
  5. 如果你将所有的值取出来放在一起,就变成了一个collection了。

用法:通过键来取
没有定义泛型的时候,键可以是任何类型,值可以是任何类型。所以规定泛型的时候既要规定key的泛型又要规定value的泛型。
在这里插入图片描述


分别取map里面的所有key 和value
在这里插入图片描述


查询匹配map里面是否有某个键
在这里插入图片描述


查询匹配map里面是否有某个值
在这里插入图片描述


字符串作为键,userbean作为值
然后建立了四个 键

然后通过set来看里面有几个键
在这里插入图片描述

发现有4个键。 因为键不一样,尽管值是一样的,但是键是不一样 四个键分别有四个不同的名字。


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

若泛型是UserBean 则只有三个键, 因为UserBean重写了hashcode和equals 去重了。


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

以后用的时候若想获得某个班级的值,
在这里插入图片描述


map的好处:

java里面一个方法只能一个返回值,若要一次性传多个返回值回来,这时就可以将这些值封装到map里面 打包返回即可
map里面装list list里面装学生 学生里面又装老师 等等

分析源码我们能得到:
1.hashmap是基于hash表来实现的,数组+链表(单链) 数组+红黑
2.底层采用Entry(jdk 1.7以及以前 1.8Node来表示) +链表
3.hashmap采用key-value的形式来存数据,允许为null,但是只能出现一次。
4.Hashmap是线程不安全的。(没有sacranized关键字)
5.hashmap存入顺序和取出来顺序可能不一样。由key决定
6.hashmap保存数据的时候,根据key的Hash值来决定存放位置的。(可能存在hash冲突)

分析代码的属性和方法:

  1. initialCapacity 代表初始容量,指的是hashmap在初始化的时候的自身的容量,可以在构造方法中传递进来,如果你不指定值,默认是16.
  2. size: 当前hashmap的键值对数量
  3. loadFactor(DEFAULT_LOAD_FACTOR )当hashmap的值到达一定范围后,我们既要开始扩容,加载因子默认是0.75,你也可以通过构造来指定加载因子。 0.75是什么意思? 比如默认的容量为16 ,0.75*16 = 12,当你的容量达到12的时候,就要开始考虑提前扩容了。
  4. threshold:扩容阀值: 指的是能扩容的空间有多大,一般默认扩容为原来的二倍。 扩容阀值 = hashmap总量*加载因子

hashMap和hashtable的区别

《看到哈希 首先想到他用到了哈希算法
也是一种键值对的存储方式
hashtable不允许空键空值,但是hashmap允许》

  1. 两者在api的操作上基本上一样,没有太大的区别。两者都实现了Map接口。
  2. hashMap允许null键null值(null键只能出现一次),hashtable不允许出现null键null值。
  3. hashMap线程不安全,hashTable是线程安全的。
  4. hashMap的效率高些,hashTable效率低。

treeMap

treeMap底层是采用红黑树算法来进行数据的查找,红黑树的每个节点都是一个Entry,里面包含了KEY键 Value值 Left 左节点Right右节点 Parent color,root节点默认是黑色,entry是根据key来进行排序的,Entry节点包含的内容为value。

entry排序是按照key来排的,key是放在treeset里面的,entry的key要比较大小是根据entry里面的一个comparator比较器来进行判断的

size:红黑树的节点个数

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/88695550
今日推荐