我有一個簡單的
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
有沒有什麼一個寫好的方法是能快速的判斷是否相同呢?
謝謝
作者:
ssccg (23)
2016-05-09 14:00:00沒有重複的值才能用Set有重複的值最簡單就把兩個list都sort後再用equals
作者:
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
作者:
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:00sort後, 把兩個陣列裡面的值變成文字串起來 有沒有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的元素,則表示不相等