Map接口及其实现类HashMap、LinkedHashMap和Hashtable的简单介绍

一、Map集合的特点

  1. Map集合是一个双列集合,一个元素包含两个值(一个是key,一个是value)Map集合的特点
  2. Map集合中的元素,key和value的数据类型可以相同也可以不同
  3. Map集合中的元素,key是不允许重复的,value是可以重复的
  4. Map集合中的元素,key和value是一一对应的

Map的常用方法

1、public V put (K key, V value)方法

作用:把指定的键与指定的值添加到Map集合中
返回值V的含义:存储键值对的时候,key如果不重复,返回值v是null;存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值

2、public V remove(Object key)方法

作用:把指定的键所对应的键值对元素,在Map集合中删除,返回被删除的值
返回值V:当key存在的时候,v返回被删除的值;当key不存在的时候,v返回null
注意我们需要注意在接收返回值的时候,使用包装类,因为基本数据类型无法接收null值,举例说明

public static void main(String[] args){
	Map<String,Integer> map = new HashMap<>();
	map.put("赵丽颖"168);
	map.put("林志玲"165);
	map.put("杨颖"178);
	System.out.println(map);// 打印输出{林志玲= 168, 杨颖 = 178, 赵丽颖 = 168}
	Integer v = map.remove("林志颖");// 得到v是null
	// 当我们使用int类型接收返回值的时候
	int v = map.remove("林志颖");// 会报出空指针异常的错误,因为int类型接收不到null值
	
}

3、public V get(Object key)方法

作用:根据指定的键,在Map集合中获取对应的值
返回值的含义:当key存在的时候,返回对应的value值,key不存在的时候,返回null

4、boolean containsKey(Object key)方法

作用:判断集合中是否包含指定的键
返回值含义:如果集合中包含key则返回true,如果不包含则返回false

如何遍历Map集合?

1、Map集合遍历的第一种方式:

我们需要使用keySet()方法,把Map集合中所有的key取出来存储到Set集合中,然后通过get(key)方法把每个对应的键找到对应的值,然后实现遍历效果

举例说明

public static void main(String[] args){
	Map<String,Integer> map = new HashMap<>();
	map.put("赵丽颖"168);
	map.put("林志玲"165);
	map.put("杨颖"178);
	// 使用Map集合中的keySet()方法,把Map集合中的所有key取出来,存储到一个Set集合当中
	Set<String> set = map.keySet();
	// 遍历Set集合,获取Map集合当中的每一个key
	// 使用迭代器遍历
	Iterator<String> it = set.iterator();
	while (it.hasNext()){
		String key = it.next();
		// 通过Map集合中的方法get(key)找到value
		Integer value = map.get(key);
		System.outprintln(key + "=" + value);
	}
	
}

2、Map集合的第二种遍历方式

(1)首先我们需要了解Entry键值对对象是什么?
Map.Entry<K,V>:在Map接口中有一个内部接口Entry

作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
(2)Set<Map.Entry<K, V>> entrySet()方法
Map中有一个entrySet()方法是用来把Map集合内部的多个Entry对象取出来,存储到一个Set集合中

(3)使用Entry对象进行遍历Map集合
实现步骤:
① 使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
② 遍历一个Set集合,获取每一个Entry对象
③ 使用Entry对象中的方法getKey()和getValue()获取键与值

举例说明:

public static void main(String[] args) {
	Map<String,Integer> map = new HashMap<>();
	map.put("赵丽颖"168);
	map.put("林志玲"165);
	map.put("杨颖"178);
// 1、使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中	
	Set<Map.Entry<String, Integer>> set = map.entrySet();
// 2、遍历一个Set集合,获取每一个Entry对象
// 使用迭代器遍历set集合
	Iterator<Map.Entry<String, Integer>> it = set.iterator();
	while (it.hasNext()){
		Map.Entry<String, Integer>> entry = it.next();
// 使用Entry对象中的方法getKey()和getValue()获取键与值
		String key = entry.getKey();
		Integer value = entry.getValue();
		System.outprintln(key + "=" + value);
	}
	
}

二、HashMap集合

HashMap集合是Map的实现类

1、HashMap集合的特点

  1. HashMap集合的底层是哈希表,查询的速度特别块
  2. HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致

2、HashMap存储自定义类型键值

如果想要把自定义类型存储到key当中,那么你的自定义类型必须重写hashCode()方法和equals()方法,以保证key唯一。如果想存入value的话则不用重写hashCode()方法和equals()方法

三、LinkedHashMap集合

LinkedHashMap集合是HashMap集合的子类,继承类HashMap集合

LinkedHashMap集合的特点

  1. LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
  2. LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的

四、Hashtable和HashMap集合的区别

HashMap集合:
1、可以存储null值,null键。
2、底层是一个哈希表,是一个线程不安全的集合,速度块
Hashtable集合:
1、不能存储null值,null键
2、底层也是一个哈希表,是一个线程安全的集合,速度慢

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值