`
孤星119
  • 浏览: 122775 次
  • 性别: 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);
		*/
	}

}

 

分享到:
评论

相关推荐

    HashTable和HashMap的区别_动力节点Java学院整理

    HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...

    Java HashMap的三种遍历方法及优缺点含示例

    当两个或更多的键的哈希值相同时,就会发生哈希冲突,此时,这些键值对就会存储在链表中。 在JDK1.8之前,当链表长度大于阈值(默认为8)时,链表会被转化为红黑树,以减少搜索时间。而在JDK1.8之后,这个阈值被改...

    Java集合框架源码剖析:HashSet 和 HashMap

     之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。  HashMap实现了Map...

    HashSet和HashMap的区别_动力节点Java学院整理

    HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...

    实验6 容器

    要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:键盘输入可以使用Scanner类】 使用两...

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...

    HashMap的工作原理和底层实现(二)红黑树的左旋、右旋

    每个红色结点的两个子结点一定都是黑色。 任意一结点到每个叶子结点的路径都包含数量相同的黑结点。  每当对红黑树结点进行增删改的时候可能会破坏红黑树的性质,因此我们需要维持这5条性质。有三种方式:变色、...

    超实用的面试题整理

    · 如果两个key有相同的hash值,他们会被放在table数组的同一个桶里面。 · key的equals()方法用来确保key的唯一性。 · value对象的equals()和hashcode()方法根本一点用也没有。 HashMap是基于哈希表实现的,每...

    Java初学者都必须理解的六大问题

    同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。  看一下一个极端的类:  Class ...

    SSH框架登录示例 同一账户只能一人登录

    使用(数据库脚本包含在内)HashMap+HttpSessionListener, 对于非正常退出 可在 浏览器 unload 时 使用 AJAX 实现(简单的很,大家自己写吧)NOTE:解压缩后 文件夹内还有两个压缩包,压缩包内文件名是相同的 ...

    sesvc.exe 阿萨德

    从这两个核心方法(get/put)可以看出 1.8 中对大链表做了优化,修改为红黑树之后查询效率直接提高到了 O(logn)。 但是 HashMap 原有的问题也都存在,比如在并发场景下使用时容易出现死循环。 final HashMap, ...

    java 课程 实验

    要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:键盘输入可以使用Scanner类】 2. ...

    判断链表是否为回文链表leetcode-Problems:问题及解决方案

    两个循环,第一个循环抛出列表,第二个循环检查每个值是否正确。 时间复杂度:O(n2) 2. HashMap 构建hashmap(K:value,V:index),对每个元素,检查索引是否为target-i。 如果是,则获取相应的值。 时间复杂度:(n) 3....

    JAVA面试题最全集

    判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和...

    Java的六大问题你都懂了吗

    同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。所以当你是用equals方法判断对象的内容...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    leetcode中国-leetCode:记录leetcode答题

    双指针,先快排形成有序,遍历一次选定第一个数,然后头尾指针遍历第一数右边的数,三数结果&lt;0&gt;0则往左移,避免重复需保证相邻的两个数不相等 p17 电话号码的字母组合 用一个二维数组作为字典代表每个数字对应的字母...

    java面试题.docx

    两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什么作用? java 中操作字符串都有哪些类?它们之间有什么区别? 如何将字符串反转? String 类的常用方法都有那些? 接口和抽象...

    变态级JAVA程序员面试32问

     第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?  第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里...

    java面试宝典

    18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可...

Global site tag (gtag.js) - Google Analytics