[问题] 检查ArrayList是否重复

楼主: dwadefans (wade)   2016-05-09 13:37:35
我有一个简单的
ArrayList<Integer> a,b及c
a = {1,2,3,4,5}
b = {2,3,4,5,1}
c = {1,2,3,4,5,6}
我想得到a=b , c不等于a与b
a与b从排列顺序不同但是内容物是相同的
b多出一个6
有没有什么一个写好的方法是能快速的判断是否相同呢?
谢谢
作者: omidofor (妈妈咪呀)   2016-05-09 13:51:00
参考 Set
作者: ssccg (23)   2016-05-09 14:00:00
没有重复的值才能用Set有重复的值最简单就把两个list都sort后再用equals
作者: mars90226 (火星人)   2016-05-09 16:14:00
Java没有内建Multiset,不然这个最适合
作者: bitlife (BIT一生)   2016-05-09 18:56:00
根据数学集合论,可以先判断length是否相等,不是结案,是的话,先针对A每个元素检查B是否包含,若不成立结案,仍成立就再针对B每个元素检查A是否包含,若仍成立则两者相等不过一样,如果没有sort,上面这个方法会是O(N^2),N若真的很大,先sort还是会比较快^当相等时综合以上,length相等且N很大就先sort用三楼的方法
作者: MIM23 (HAWK)   2016-05-09 20:40:00
{1,2,2,2} {2,1,1,1} 好像也满足楼上的条件
作者: bitlife (BIT一生)   2016-05-09 20:44:00
楼上对,我搞错了,要元素无重复的才能能我满足我写的集合论定理的前提所以还是sort再比是否相等吧
作者: kogrs (kogrs)   2016-05-09 22:05:00
先转 array ,再利用 java.util.Arrays, sort 再 equals
作者: ripple0129 (perry tsai)   2016-05-09 22:57:00
每次看到这类题目就怀念Python
作者: ssccg (23)   2016-05-09 23:56:00
不用转array,java.util.Collections有sortjava8的话List本身就有sort
作者: kogrs (kogrs)   2016-05-10 00:19:00
哈 原来jdk8已经有了xd
作者: eric781101   2016-05-10 00:27:00
其实可以自己写个类似mergeSort的判断,找ab相同部分在找和c不同的部分
作者: jej (晃奶大馬桶)   2016-05-10 12:12:00
sort后, 把两个阵列里面的值变成文字串起来 有没有equals
作者: bitlife (BIT一生)   2016-05-10 13:33:00
串起来的operation感觉还比逐一相等比较来得多,逐一比较遇到不等就结束了,光全部串起来这步骤就不少成本
作者: ssccg (23)   2016-05-10 14:24:00
串成string只是把int array变成更长的char array...
作者: gmoz ( This can't do that. )   2016-05-10 17:32:00
{1,11} 跟 {1,1,1} 表示 @w@!
作者: hanklgs (派星星)   2016-05-17 15:04:00
用hashmap A有的value+1,B有的value-1,最后hashmap有value 不为0的元素,则表示不相等

Links booklink

Contact Us: admin [ a t ] ucptt.com