java(14) - HashMap类

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

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

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

             Map子接口和实现类:

             java(14) - HashMap类_第1张图片

二.HashMap类:

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

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

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

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

        put方法源码图:

           java(14) - HashMap类_第2张图片

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

            举例:

             java(14) - HashMap类_第3张图片

           打印:

                   A

 

        图解:

            java(14) - HashMap类_第4张图片

三.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



 

 

 

 

 

 

你可能感兴趣的:(java)