[問題] 檢查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