学习思路
在leetcode中,设计题型并没有给出一个像数组、字符串等完全一致的一个讲解学习步骤,但是设计题型自我感觉是 数据结构+算法的一种结合,因此,仍然打算按照数据结构的类型来刷题学习。
Map字典类的设计题
Map接口:双列数据,存储key-value对的数据,通过IDEA查看基本类的继承关系,可以看到我们常用Map的类关系如下,选择数据结构,还是需要了解数据结构的特点,我将从键值特点、是否排序、使用范围、线程安全、执行效率几个方面对几个类进行选择。
结构特点 | 排序 | 特点 | 使用范围 | 线程安全 | 执行效率 | 学习连接 | |
HashMap | 哈希算法:通过计算,将任意长度的字符串转换成一定长度字符串,无穷集合映射的有限空间,必然会出现哈希冲突,方法有乘法散列,除法散列,全散列等。哈希冲突解决方法一般为链表法,将hash冲突的输入用链表链起来 结构,数组+链表(当链表长度大于16时为红黑树) 数组为key的hash值%输入的长度,链表为key.value的保存结构 |
无序 | (1)key,value都可以为null,key各不相同,value可以相同 (2)继承clonable和Serializable,可序列化,可map.clone (3)默认大小16,扩展0.75 |
无序,访问速度快时使用 | 不安全 | 1 |