作者dwadefans (wade)
看板java
标题[问题] 检查ArrayList是否重复
时间Mon May 9 13:37:35 2016
我有一个简单的
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
有没有什麽一个写好的方法是能快速的判断是否相同呢?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.251.134
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1462772258.A.B81.html
1F:推 omidofor: 参考 Set 05/09 13:51
2F:→ ssccg: 没有重复的值才能用Set 05/09 14:00
3F:→ ssccg: 有重复的值最简单就把两个list都sort後再用equals 05/09 14:00
4F:推 mars90226: Java没有内建Multiset,不然这个最适合 05/09 16:14
5F:→ bitlife: 根据数学集合论,可以先判断length是否相等,不是结案,是的 05/09 18:56
6F:→ bitlife: 话,先针对A每个元素检查B是否包含,若不成立结案,仍成立就 05/09 18:56
7F:→ bitlife: 再针对B每个元素检查A是否包含,若仍成立则两者相等 05/09 18:56
8F:→ bitlife: 不过一样,如果没有sort,上面这个方法会是O(N^2),N若真的 05/09 18:58
9F:→ bitlife: 很大,先sort还是会比较快 05/09 18:58
10F:→ bitlife: ^当相等时 05/09 18:59
11F:→ bitlife: 综合以上,length相等且N很大就先sort用三楼的方法 05/09 19:00
12F:推 MIM23: {1,2,2,2} {2,1,1,1} 好像也满足楼上的条件 05/09 20:40
13F:→ bitlife: 楼上对,我搞错了,要元素无重覆的才能能我满足我写的集合 05/09 20:44
14F:→ bitlife: 论定理的前提 05/09 20:44
15F:→ bitlife: 所以还是sort再比是否相等吧 05/09 20:44
16F:→ kogrs: 先转 array ,再利用 java.util.Arrays, sort 再 equals 05/09 22:05
17F:→ ripple0129: 每次看到这类题目就怀念Python 05/09 22:57
18F:→ ssccg: 不用转array,java.util.Collections有sort 05/09 23:56
19F:→ ssccg: java8的话List本身就有sort 05/09 23:57
20F:→ kogrs: 哈 原来jdk8已经有了xd 05/10 00:19
21F:推 eric781101: 其实可以自己写个类似mergeSort的判断,找ab相同部分 05/10 00:27
22F:→ eric781101: 在找和c不同的部分 05/10 00:28
23F:→ jej: sort後, 把两个阵列里面的值变成文字串起来 有没有equals 05/10 12:12
24F:→ bitlife: 串起来的operation感觉还比逐一相等比较来得多,逐一比较 05/10 13:33
25F:→ bitlife: 遇到不等就结束了,光全部串起来这步骤就不少成本 05/10 13:34
26F:→ ssccg: 串成string只是把int array变成更长的char array... 05/10 14:24
27F:推 gmoz: {1,11} 跟 {1,1,1} 表示 @w@! 05/10 17:32
28F:推 hanklgs: 用hashmap A有的value+1,B有的value-1,最後hashmap有 05/17 15:04
29F:→ hanklgs: value 不为0的元素,则表示不相等 05/17 15:05
谢谢各位大大 我後来使用Set的方式
参考
http://goo.gl/Ssv5Sn
※ 编辑: dwadefans (163.18.42.216), 06/01/2016 14:07:22