hashmap 允许key重复吗_HashMap和HashTable详解

431ccbd47c584763715d66bdc684f6ca.png

现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。

Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。

Map 接口的实现类有HashMap、TreeMap、HashTable、Properties等。

Map接口中常用的方法:

c0cb4135bebc95fc7120b23fb65c8071.png

HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。

1、Map集合中的常用方法

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
 * Map接口的特点:key不能重复,值可以重复,而且key是无序的
 * 	当key重复时,进行值的覆盖
 */
public class TestHashMap {
	public static void main(String[] args) {
		Map map = new HashMap();
		//添加元素
		map.put("aa", 123);//123自动装箱---Integer
		map.put("bb", 345);
		map.put("aa", 1000);//key重复
		map.put("cc", 1000);//value重复
		System.out.println("元素的个数:" + map.size());
		System.out.println("集合是否为空:" + map.isEmpty());
		System.out.println(map);
		//删除元素
		System.out.println(map.remove("bb"));//先输出后移除
		System.out.println(map);
		//判断元素
		System.out.println("判断key是否存在:" + map.containsKey("bb"));
		System.out.println("判断value是否存在:"+map.containsValue(123));
		//获取元素
		System.out.println(map.get("aa"));
		System.out.println(map.get("bb"));//null
		//获取所有key的集合
		System.out.println("------keySet()------");
		Set set = map.keySet();
		for(Object obj : set) {
			System.out.println(obj);
		}
		//获取所有value的集合
		System.out.println("------values()------");
		Collection coll = map.values();
		for(Object obj : coll) {
			System.out.println(obj);
		}
		//获取所有K-V的集合
		System.out.println("------entrySet()------");
		Set entrySet = map.entrySet();
		for(Object obj : entrySet) {
			System.out.println(obj);
		}	
	}
}

2、HashMap与HashTable的区别

HashTable类和HashMap用法几乎一样,底层实现几乎一样,只不过HashTable的方法添加了synchronized关键字确保线程同步检查,效率较低。

1. 版本不同:HashMap-JDK1.2 Hashtable-JDK1.0

2. HashMap继承AbstractMap实现Map接口;Hashtable继承Dictionary实现Map接口

3. HashMap允许key或value为null,但是key为null只允许有一个;Hashtable不予许出现null

4. HashMap线程不同步;Hashtable线程同步

尚学堂百战程序员

百战程序员_IT6000集_影响6000万学习IT的中国人【官网】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值