java(14) - HashMap类

一.Map接口:
Map(映射):将建映射到值的对象。一个映射不能包含重复的键,每个键最多映射到一个值。

Map中包含了一个Map.Entry的内部接口,此接口是Map中的一个实体(key-value对,键值对),其中有getKey()和getValue()方法。

Map中提供了keySet()和entrySet()方法,keySet()方法返回值是Map中键的集合也就是key值,entrySet()方法的返回值是set集合,该类型是Map.Entry类型的。

Map子接口和实现类:

二.HashMap类:

HashMap是Map接口的常用实现类,与我们前面讲的HashSet的底层存储机制是一样的。

HashMap底层维护着一个Entry类型数组,我们把key-value存入Entry对象中,然后将该Entry对象存入数组。

HashMap中Entry类实现了Map.Entry接口

HashMap是把key-value变成一个整体来进行储存,通过key的hashCode值计算出一个位置,该位置就是此对象将要存入的位置。(Hash就是散列函数,通过它来计算存入数组的位置。)

put方法源码图:

如果在i这个位置没有对象存在,也就是为null,则for()不执行,直接执行下面的代码,向数组中添加对象。如果该位置上存在了对象,则会执行for语句,顺着此存在对象的链开始寻找(Entry类有一个Entry类型的next成员变量指向了下一个对象,也就是链表),如果此链上有对象的话,则再去使用equals()方法进行比较,如果对此链上某个对象的equals()方法比较为false,则将该对象放到数组中,将数组该位置以前存在的那个对象链接此对象后面。

举例:

打印:

A

图解:

三.HashMap遍历:

第一种:

public class Test {
		public static void main(String[] args) {
	         
			 HashMap  map = new HashMap();
			 map.put("1","A");
			 map.put("2","B");
			 map.put("3","C");
			 map.put("4","D");
			 
			 Iterator  iter  = map.entrySet().iterator(); 
			 
			 while(iter.hasNext()){
				 Map.Entry e= (Map.Entry)iter.next();
				 
				 String key = (String)e.getKey();
				 String value = (String)e.getValue();
				 
				 System.out.println(key+":"+value);
			 }
		}
}


打印:

3:C
2:B
1:A
4:D


第二种:

public class Test {
		public static void main(String[] args) {
	         
			 HashMap  map = new HashMap();
			 map.put("1","A");
			 map.put("2","B");
			 map.put("3","C");
			 map.put("4","D");
			 
			 Iterator iter = map.keySet().iterator();//返回一个键的集合
			 
			 while(iter.hasNext()){
				 String key = (String)iter.next();
				 String value = (String)map.get(key);
				 
				 System.out.println(key+":"+value);
			 }
		}
}

打印:

3:C
2:B
1:A
4:D



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值