Map集合及其实现类

1.Map简介

Map是独立于Collection的接口,其是为存储一组键值(Key,value)
在这里插入图片描述

Map的常用方法

方法描述
int size()获取集合长度
boolean isEmpty()判断集合是否为空
boolean containsKey(Object key)判断集合中是否存在该 key
boolean containsValue(Object value)判断集合中是否存在该 value
V get(Object key)取出 key 对应的 value
V put(K key,V value)向集合中存入一组 key-value 的元素
V remove(Object key)根据key删除一组键值对
void putAll(Map map)添加另外一个 Map
void clear()清除集合中所有的元素
Set keySet()取出集合中所有的 key值
Collection values()取出集合中所有的 value
Set<Map.Entry<K,V>> entrySet()将 Map 以 Set 的形式输出
Collection values()取出集合中所有的 value
boolean equals(Object o)比较两个Map是否相等

2. Map的实现类

① HashMap
② Hashtable
③ TreeMap

2.1 HashMap

在这里插入图片描述
在JDK1.7及以前,HashMap底层是数组+链表
jdk1.8之后,是数组+链表+红黑树结构(当链表长度大于8,转为红黑树)

HashMap的特点:无序(存储与读取顺序不一致),key唯一,value可重复

	HashMap hashMap = new HashMap();

	hashMap.put("一","aaa");
	hashMap.put("二","bbb");
	hashMap.put("三","ccc");
	hashMap.put("四","ddd");
	hashMap.put("五","eee");
   //输出顺序为"一 五 三 四 二"
	System.out.println(hashMap); 

HashMap线程不安全,需要线程安全可以采用ConcurrentHashMap

HashMap的底层是怎么实现的?

①JDK1.8之前,HashMap的底层是数组加链表实现。数组中的每个元素都是一个单链表,链表中的每个元素都是Entry的实现类Node的一个实例,Node包括4个属性:key、value、hash值和用于指向单链表下一个元素的next

②HashMap在查找数据时,根据计算hash值可以快速定位到数组的具体下标,然后对链表进行遍历查找数据,时间复杂度为O(n)
JDK1.8起对HashMap进行了优化,底层改为数组+链表或红黑树,当链表中的元素超过8个之后,HashMap会将链表结构转换为红黑树以提高查询效率,时间复杂度为O(logn)

补充:HashMap的键不能使用基本数据类型

因为基本数据类型不能调用其hashcode()方法和equals()方法进行比较,所以不能存入HashMap

HashMap存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法进行比较,如果返回true,则认为是相同的对象,不存储,如果返回false,则认为是不同的对象,可以存储到HashMap集合中

2.2 HashTable

Hashtable与HashMap的相同点与区别

Hashtable 用法与 HashMap一样,特点也是无序、key唯一,value可重复

区别:Hashtable 线程安全,性能较低(采用synchronized关键字)
HashMap 非线程安全,但是性能较高

2.3 TreeMap

<font size=3>  存储一组有序,key 不可以重复,value 可以重复的元素,可以按照 key 进行排序
<font size=2> 有序的特点和TreeSet类似,默认升序,如果存储类则该类需要实现Compareble接口
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值