Map接口(hashMap面试题)

Day 20补充 map
Day 20补充 map

注意:不再是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的泛型。
Day 20补充 map


分别取map里面的所有key 和value
Day 20补充 map


查询匹配map里面是否有某个键
Day 20补充 map


查询匹配map里面是否有某个值
Day 20补充 map


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

然后通过set来看里面有几个键
Day 20补充 map

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


Day 20补充 map
Day 20补充 map
Day 20补充 map

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


Day 20补充 map
Day 20补充 map

以后用的时候若想获得某个班级的值,
Day 20补充 map


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:红黑树的节点个数

Day 20补充 map

相关文章:

  • 2022-12-23
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2021-07-13
  • 2021-11-25
  • 2021-04-01
猜你喜欢
  • 2022-01-05
  • 2021-06-09
  • 2021-11-26
  • 2022-02-15
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
相关资源
相似解决方案