朋友面试的一道算法题,实现简单,但难分辨那种解决方案效率最高,大家进来各抒己见吧。 本帖最后由 iyiman 于 2010-04-22 23:40:52 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果用HASHMAP作比较的话,应该重写HASHCODE和EQUESE方法...这样效率要比两个循环的高很多... 其实楼主和面试官的效率几乎都一样.....但如果使用HASHCODE来比较,远远超出了嵌套循环的效率,本人从海量数据角度考虑的... 你的意思是一般不用两个循环,用两个循环效率低,但是你看看面试官使用的那个方法的代码,你就知道他实际套的循环可以算3层了。public boolean containsValue(Object value) { if (value == null) return containsNullValue(); Entry[] tab = table; for (int i = 0; i < tab.length ; i++) for (Entry e = tab[i] ; e != null ; e = e.next) if (value.equals(e.value)) return true; return false; }大家评论后看看你自己有没有更好的解决方案。。 还有我刚才才发现,List有contains(Object)方法为什么要把List变成Map呢?没搞明白。。 如果只是单纯的统计相同的值 可以用HashSet啊 两个list 都往里添加一遍 两个list之和减去HashSet的长度 就是相同对象的数量了 contains这方法需要重写Object的equals不过我也不明白,为啥要放到MAP上去 Set conSet = new HashSet();conSet.addAll(list1);conSet.addAll(list2);System.out.println("相同的对象有:" + (list1.size()+list2.size()-conSet.size())); 同意14楼,set插入不重复元素,使用的是散列,比for循环要快速 JAVA写入mysql数据库出现空指针问题 项目导入的若干问题 JAVA获取客户端的IP地址 马士兵ssh整合问题 如何运行已经部署在jboss下的服务端GUI j2ee如何和c建立socket连接 javaservlet如何在一个界面利用不同按钮区分不同界面? 获得系统时间的问题!!???? <html:form/>中究竟有没有name这个属性? ●●●●100分:Jbuilder自带的ejb例子出错,例子是在samples\Ejb\Ejb20\ESiteWL下的esite,错误提示如下:(急等) ehcache缓存的问题 急!一个简单验证是否登录的filter问题
if (value == null)
return containsNullValue(); Entry[] tab = table;
for (int i = 0; i < tab.length ; i++)
for (Entry e = tab[i] ; e != null ; e = e.next)
if (value.equals(e.value))
return true;
return false;
}
大家评论后看看你自己有没有更好的解决方案。。
contains这方法需要重写Object的equals不过我也不明白,为啥要放到MAP上去
conSet.addAll(list1);
conSet.addAll(list2);
System.out.println("相同的对象有:" + (list1.size()+list2.size()-conSet.size()));