Map是一个接口,同时也属于集合中的一种,同样用来存储引用数据类型的变长的容器,用于存储具有映射关系的数据,因此Map集合中的元素是以键值对的形式存在的
key:键
value:值
注意:key和value之间存在单向一一对应的关系,【即通过一个key,就可以找到它对应的唯一的确定的value】
特点:
a、Map集合中的元素是以键值对的形式存在的,一个键只能对应一个值,不允许只有键没有值,也不允许一个键对应多个值,在同一个集合中不能出现多个相同的键
b、Map集合中的元素是按照键来排重的,不允许键重复,但是值是可以重复的【如果添加了集合已经存在的键,那么后添加的回覆盖掉之前添加的】
c、键和值都必须是引用数据类型
d、键和值都可以是null常量
1.HashMap
特点:
a、无序,
b、底层采用的数据结构是:哈希算法
总结:
HashMap和HashSet之间的区别;
HashMap HashSet
==================================================================================================
实现了Map接口 实现了Set接口
存储键值对 存储对象
通过put()方法添加元素 通过add()方法添加元素
效率高,使用键直接获取值 效率相对较低
【面试题】:HashMap的工作原理
基于哈希算法实现,通过put方法和get方法进行存取对象,当我们将键值对传递给put方法,它会调用对象的hashCode()方法来计算hashCode值,然后在内存中找到位置进行存储对象,当获取对象,通过get方法来进行获取,但是,在获取过程中或调用equals方法找到正确的键值对,然后返回值的对象
2、LinkedHashMap
特点:
a、有序的【键值对的添加的顺序和存储的顺序相同】
b、底层存数采用的数据结构是:链表
3、Hashtable
Hashtable和HashMap之间的关系就类似与Vector和ArrayList之间的关系
特点:
a、在用法上和HashMap完全相同
b、Hashtable是一个古老的集合【从JDK1.0开始就有了】
c、Hashtable是线程安全的,HashMap是线程不安全的
d、Hashtable性能是相对比较低的,不推荐使用Hashtable
e、Hashtable不允许将null作为键和值,如果试图将null作为Hashtable的键值的时候会发生空指针异常,但是HashMap是允许使用的
4、TreeMap
TreeMap是Map集合的一个实现类,同时也是SortedMap的实现类
特点:
a、有序的,排序方式:自然排序和定制排序
b、底层采用的数据结构是:二叉树【红黑树】