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
    评论
Java中的HashMap是一种基于哈希表实现的Map集合,它用于存储键值对,其中每个键都可以映射到一个唯一的值。HashMap的底层实现是一个数组和链表结合的数据结构,它通过哈希函数将键映射到数组中的一个位置,然后在该位置上使用链表存储具有相同哈希值的键值对。 HashMap的常用方法有: 1. put(key, value):向HashMap中添加键值对。 2. get(key):根据键获取对应的值。 3. remove(key):根据键删除对应的键值对。 4. containsKey(key):判断HashMap中是否包含指定的键。 5. containsValue(value):判断HashMap中是否包含指定的值。 6. keySet():返回HashMap中所有键的集合。 7. values():返回HashMap中所有值的集合。 8. entrySet():返回HashMap中所有键值对的集合。 例如,我们可以创建一个HashMap对象用于存储学生的姓名和对应的成绩: ``` HashMap<String, Integer> scores = new HashMap<>(); scores.put("Alice", 90); scores.put("Bob", 80); scores.put("Charlie", 70); ``` 然后,我们可以根据键来获取对应的值: ``` int score = scores.get("Alice"); // score = 90 ``` 也可以遍历HashMap中的所有键值对: ``` for (Map.Entry<String, Integer> entry : scores.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } ``` 需要注意的是,HashMap并不是线程安全的,如果在多线程环境下使用,需要进行额外的同步处理。另外,如果HashMap中的键对象是自定义的,需要注意该是否正确实现了equals()和hashCode()方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值