2个集合比较——最高效解法(Java实现)
优点:时间复杂度为O(n)级别;
缺点:只适用于Int,以及Int的数字不能过大,集合元素数量不能过多。
理论分析:
两个集合的元素之和以及之积相同则,这两个集合相等。(前提是两个集合的数量一致)
证明: 先证明集合只有两个元素的情况A={a,b} B={x,y}
a+b=x+y,a*b=x*y 联立之后可以得出2组解a=x,b=y;a=y,b=x;说明2个集合相等。
更多的元素的集合。我们只需要假设k元素的时候相等。则k+1个元素是一样证明的,用不完全归纳法即可以解。
下面上代码:
public class SetEqual {
static boolean isEqual(Set<Integer> set1,Set<Integer>set2){
if(set1.size()!= set2.size()) return false;
int sum1=0,sum2=0;
int multi1=1,multi2=1;
Iterator<Integer> it1 = set1.iterator();
while(it1.hasNext()){
Integer tmp = (Integer) it1.next();
sum1 += tmp;
multi1 = multi1*tmp;
}
Iterator<Integer> it2 = set2.iterator();
while(it2.hasNext()){
Integer tmp = (Integer) it2.next();
sum2 += tmp;
multi2 = multi2*tmp;
}
return (sum1 == sum2)&&(multi1 == multi2);
}
public static void main(String [] args){
Set<Integer> set1= new HashSet<Integer>();
Set<Integer> set2= new HashSet<Integer>();
set1.add(1);set1.add(3);set1.add(5);set1.add(7);set1.add(11);
set2.add(11);set2.add(13);set2.add(5);set2.add(7);set2.add(1);
System.out.print("=="+isEqual(set1,set2));
}
}
2个集合比较——最高效解法(Java实现)的更多相关文章
- Github优秀java项目集合(中文版) - 涉及java所有的知识体系
Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容 ...
- 【译】快速高效学习Java编程在线资源Top 20
想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...
- 几种高效的Java工具类推荐
本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...
- 快速高效学习Java编程在线资源Top 20(转载)
想要加强你的编程能力吗?想要提升你的 Java 编程技巧和效率吗? 不用担心.本文将会提供快速高效学习 Java 编程的 50 多个网站资源: 开始探索吧: 1.MKyong:许多开发者在这里可以找到 ...
- 高效使用Java构建工具,Maven篇|云效工程师指北
大家好,我是胡晓宇,目前在云效主要负责Flow流水线编排.任务调度与执行引擎相关的工作. 作为一个有多年Java开发测试工具链开发经验的CRUD专家,使用过所有主流的Java构建工具,对于如何高效使用 ...
- 《码处高效:Java开发手册》之代码风格
流水淡,碧天长,鸿雁成行.编码风格,简捷清爽,反引无限风光. 在美剧<硅谷>中有这样一个经典镜头,主人公 Richard 与同为开发工程师的女友闹分手,理由是两人对缩进方式有着截然不同的编 ...
- Java集合详解8:Java的集合类细节精讲
Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...
- 在Dubbo中使用高效的Java序列化(Kryo和FST)
在Dubbo中使用高效的Java序列化(Kryo和FST) 作者:沈理 文档版权:Creative Commons 3.0许可证 署名-禁止演绎 完善中…… TODO 生成可点击的目录 目录 序列化漫 ...
- 《码出高效:Java开发手册》第四章学习记录,内容想当的多,前后花了几天的时间才整理好。
<码出高效:Java开发手册>第四章学习记录,内容想当的多,前后花了几天的时间才整理好. https://naotu.baidu.com/file/e667435a4638cbaa15eb ...
随机推荐
- c语言的学习秘籍
c语言其实是一环套一环胡的,最开始的是变量,然后是数组,接着是结构体,接着是链表.(其他的是c语言的语法,那东西大多了就会了.) 学习时可以从程序在电脑里的内存看起,先了解变量,将多个变量连起来就是数 ...
- MVC @Html.TextBox 添加属性和样式
1.添加属性:@Html.TextBox("CnAddressmodify","", new { maxlength="90" }) 2.添 ...
- 在linux中安装adb和fastboot工具
我用的是archlinux,在官方的软件仓库里就可以找到对应的包,包的名字叫:android-tools 据说debian系列的软件包是两个,分别是:android-tools-adb, androi ...
- Material Design Lite,简洁惊艳的前端工具箱 之 布局组件。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .网站上有对应每一 ...
- 如何拥有一个自己的Vagrant box
这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...
- Java 可变参数列表
1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表.在以前的Java代码中,可以使用Object数组来实现这样的功能.因为,所有的类都是直接或间接继承于Objec ...
- 50个常用的JQuery代码
1. 如何创建嵌套的过滤器 //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“se ...
- degign new theme for Filezilla(Mac OS X)
the theme directory is located at Filezilla.app/Contents/SharedSupport/resources/ the dirs (excludin ...
- async和await浅析
要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点: 只有在a ...
- Python多进程编程
转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...