`
孤星119
  • 浏览: 124441 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

比较两个HashMap是否相同

 
阅读更多

比较两个HashMap是否相同, 刚看到一个面试题, 就写了下, 如有错误, 还请看到的指正啊. 效果应该是使用entrySet较快

 

import java.util.HashMap;
import java.util.Map;


public class Test {

	public static boolean compareMapByKeySet(Map<String,String> map1,Map<String,String> map2){

		if(map1.size()!=map2.size()){  
			return false;
		}
		
		
		String tmp1;
		String tmp2;
		boolean b=false;
		
		for(String key:map1.keySet()){
			if(map2.containsKey(key)){
				tmp1=map1.get(key);
				tmp2=map2.get(key);
				
				if(null!=tmp1 && null!=tmp1){ 
					
					if(tmp1.equals(tmp2)){
						b=true;
						continue;
					}else{
						b=false;
						break;
					}
					
				}else if(null==tmp1 && null==tmp2){	 
					b=true;
					continue;
				}else{
					b=false;
					break;
				}
				
				
			}else{
				b=false;
				break;
			}
			
		}

		return b;
	}
	
	
	
	
	public static boolean compareMapByEntrySet(Map<String,String> map1,Map<String,String> map2){

		if(map1.size()!=map2.size()){  
			return false;
		}
		
		String tmp1;
		String tmp2;
		boolean b=false;
		
		for(Map.Entry<String, String> entry:map1.entrySet()){
			if(map2.containsKey(entry.getKey())){
				tmp1=entry.getValue();
				tmp2=map2.get(entry.getKey());
				
				if(null!=tmp1 && null!=tmp1){ 	//都不为null
					if(tmp1.equals(tmp2)){
						b=true;
						continue;
					}else{
						b=false;
						break;
					}
				}else if(null==tmp1 && null==tmp2){	 //都为null
					b=true;
					continue;
				}else{
					b=false;
					break;
				}
			}else{
				b=false;
				break;
			}
		}
		

		return b;
	}
	
	
	public static void main(String[] args) {
		
		Map<String,String> hs1=new HashMap<String,String>();
		Map<String,String> hs2=new HashMap<String,String>();
		
		hs1.put("001key","001value");
		hs1.put("002key","002value");
		hs1.put("003key","003value");
		hs1.put("004key","004value");
		hs1.put("005key","005value");
		hs1.put("006key","006value");
		hs1.put("007key","007value");
		
		hs2.put("001key","001value");
		hs2.put("002key","002value");
		hs2.put("006key","006value");
		hs2.put("005key","005value");
		hs2.put("007key","007value");
		hs2.put("004key",null);
		hs2.put("003key","003value");
		
		
		long st1=System.currentTimeMillis();
		boolean b1=compareMapByKeySet(hs1, hs2);
		long et1=System.currentTimeMillis();
		
		System.out.println("使用keySet方法比较的结果是: "+b1+", 耗时是: "+(et1-st1));
		
		long st2=System.currentTimeMillis();
		boolean b2=compareMapByEntrySet(hs1, hs2);
		long et2=System.currentTimeMillis();
		
		System.out.println("使用entrySet方法比较的结果是: "+b2+", 耗时是: "+(et2-st2));
		
		
/*		
		long starttime1=System.currentTimeMillis();
		for(String key:hs1.keySet()){
			System.out.println(hs1.get(key));
		}
		long endtime1=System.currentTimeMillis();
		
		System.out.println(endtime1-starttime1);
		
		long starttime2=System.currentTimeMillis();
		for(Map.Entry<String, String> entry:hs1.entrySet()){
			System.out.println(entry.getValue());
		}
		long endtime2=System.currentTimeMillis();
		
		System.out.println(endtime2-starttime2);
		*/
	}

}

 

分享到:
评论

相关推荐

    java HashMap原理分析

    在HashMap中,equals方法用于比较两个Key是否相等,而hashCode方法用于将Key转换为一个哈希码。如果两个Key具有相同的hashCode,但equals结果不同,那么他们就是不同的Key。 5. Java中HashMap的应用和实现 HashMap...

    hashmap实现原理

    当两个键的`hashCode()`相同,HashMap会使用`equals()`方法来比较键的等价性,从而确定键值对在链表中的位置。 在Java中,HashMap的初始化涉及两个重要属性:initialCapacity(初始容量)和loadFactor(负载因子)...

    Java中HashMap详解(通俗易懂).doc

    在HashMap中,键和值可以是任何类型的对象,只要它们实现了equals()和hashCode()方法,这两个方法用于确定对象的哈希值以及比较两个对象是否相等。 HashMap的存储机制基于以下几个关键点: 1. **哈希函数**:...

    HashMap的数据结构

    7. **键的唯一性**:HashMap中的键是唯一的,这意味着不能有两个相同的键存在。如果尝试插入一个已经存在的键,新的值将会替换旧的值。 8. **迭代器**:HashMap提供了迭代器`keySet()`、`values()`和`entrySet()`,...

    HashMap介绍和使用

    假设数组长度为16(2的4次方),如两个键的哈希值分别为8和9,进行按位与操作后结果相同(均为0),这会导致哈希碰撞。因此,8和9会存放在数组的同一位置,形成链表。 然而,如果数组长度为非2的幂,如15(1111二...

    HashMap总结

    HashMap 使用链表来解决哈希冲突的问题,即当两个键的哈希值相同时,HashMap 使用链表来存储这些键值对。 HashMap 的应用场景 1. 缓存机制:HashMap 可以用来实现缓存机制,例如缓存用户信息、缓存查询结果等。 2....

    Java中HashMap的工作机制

    为了确保两个相等的对象在哈希表中可以被正确地映射到相同的“桶”(bucket)里,这些对象必须返回相同的哈希码,这通常通过重写hashCode()和equals()方法来实现。 HashMap在Java中的实现正是基于这样的哈希机制。...

    Java HashMap类详解

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,虽然它们实现的接口规范不同,但它们底层的 Hash 存储机制完全一样。甚至 HashSet 本身就采用 HashMap 来实现的。 2. Hash 存储机制 HashMap ...

    hashmap 集合

    如果两个键的哈希码相同,HashMap会使用equals()方法来区分它们,这就是所谓的哈希碰撞。为了优化性能,HashMap通常会动态调整其容量,以保持较低的装载因子(load factor),通常是0.75,以减少冲突。 在实际项目...

    全手写HashMap精简版Demo 可直接允许查看效果

    当两个键的哈希值相同时,即发生了哈希冲突。HashMap通过链表来解决这个问题,每个数组元素(桶)实际上是一个链表,相同的哈希值的键值对会被链接在一起。在Java 8之后,如果链表长度超过一定阈值(通常是8),...

    Hashmap详解

    HashMap 的数据结构可以分为两部分:数组和链表。数组是 HashMap 的基本结构,链表是数组元素的具体实现。每个数组元素是一个链表,链表中的每个节点都是一个键值对(key-value)。链表的每个节点都有一个指向下一个...

    获取两个数组相同的元素或不同的元素输出

    `equals()`方法会检查两个数组的引用是否指向同一个对象,以及两个数组的长度是否相同,如果这两个条件都满足,再逐个比较每个元素是否相等。但是,这并不适用于找出相同或不同的元素,它只能告诉我们两个数组是否...

    用hashmap实现词典查询

    4. **处理冲突**:虽然HashMap尽力避免冲突,但在实际应用中,可能存在两个单词哈希码相同的情况。这时,HashMap会使用链表或红黑树来存储这些冲突的键值对,确保查找性能不会显著下降。 5. **查询操作**:用户输入...

    面试必考之HashMap源码分析与实现

    在HashMap中,如果两个键的哈希值相同但并不相等,它们会在同一个桶(数组索引位置)形成链表。JDK 8之后,为了优化冲突处理,当链表长度达到一定阈值(8)时,会将链表转换为红黑树,以保持查找、插入和删除的高效...

    判断List和Map是否相等并合并List中相同的Map

    HashSet的相等判断先比较两个对象hashCode()方法返回的值是否相等,如果不相等就认为两个对象是不相等的,如果两个对象的hashCode相等就继续调用equals()方法进一步判断两个对象是否相等。如果equals()方法返回true...

    hashmap.zip

    当两个键通过哈希函数计算出相同的索引时,它们会被链接到同一个链表上,这就是所谓的哈希碰撞。 在Java中,HashMap的工作流程如下: 1. 当我们插入键值对时,先计算键的哈希值,然后使用这个哈希值作为数组的索引...

    delphi hashmap集合

    当两个不同的键被哈希到相同的索引时,会发生哈希冲突。为了处理这种情况,HashMap通常采用开放寻址法或链地址法。在Delphi的实现中,更常见的是链地址法,即将冲突的键值对链接成链表。 1. **HashMap的特性:** -...

    hashMap具体详解

    8. null键和值:HashMap允许键和值为null,但只有一个键可以为null,如果有两个键为null,后插入的会覆盖前一个。而值可以有多个为null。 9. 其他特性:HashMap还提供了containsKey()、containsValue()、clear()等...

    java中HashMap详解.pdf

    在出现散列冲突时,如两个键的hashCode()值相同,则会检查它们的equals()方法。如果equals()返回true,表明它们是相同的键,新的值将覆盖旧的值。如果equals()返回false,则将这个新的Entry对象放入链表中。 在添加...

    HashMap和链表的查找效率比较

    `List`接口有两个常见的实现类:`ArrayList`和`LinkedList`。`ArrayList`基于动态增长的数组实现,而`LinkedList`则是由双向链表构成。在`ArrayList`中,查找元素需要从头到尾遍历,时间复杂度为O(n);而`LinkedList...

Global site tag (gtag.js) - Google Analytics