我在java中有兩個arraylist A和B.數組列表A具有重複但數組列表B具有獨特而不是從數組列表A.所有元素我希望計算數組列表甲中存在的數組列表乙元件的頻率java arraylists比較A和B
小例子
A = {Red, Black, Red, Black, Green, Green, Brown, Black, Brown, Green}
B= {Red, Brown, Green}
結果應該是 紅色= 2,布朗= 2綠色= 3
我在java中有兩個arraylist A和B.數組列表A具有重複但數組列表B具有獨特而不是從數組列表A.所有元素我希望計算數組列表甲中存在的數組列表乙元件的頻率java arraylists比較A和B
小例子
A = {Red, Black, Red, Black, Green, Green, Brown, Black, Brown, Green}
B= {Red, Brown, Green}
結果應該是 紅色= 2,布朗= 2綠色= 3
你能不能用地圖更換名單A 210 K,V >其中K是您在A中具有的對象的類類型(例如String),V是諸如Integer或Long之類的數字。然後,而不是簡單地將相同的舊值分爲A(當你構建擺在首位的列表),你可以這樣做,例如:
Map<String, Integer> countMap = new HashMap<String, Integer>();
Integer currentCount = countMap.get("Red");
countMap.put("Red", (currentCount == null ? 1 : currentCount.intValue() + 1));
然後讓每個對象在列表中找到的計數B,你只需通過地圖運行,檢查從B中的一個每個對象後,其他:
List<String> listB = new List<String>();
listB.add("Red");
listB.add("Brown");
listB.add("Green");
for(String s : listB) {
Integer quantityFoundInA = countMap.get(s);
System.out.println("String <"+s"> found in list (map) 'A' "+(quantityFoundInA == null ? 0 : quantityFoundInA.intValue())+" times");
}
我猜測,這種結構將更有效率比簡單地存儲在列表中的同一對象的多個副本(只要存儲在A中的對象在共享相同名稱時完全相同)。
謝謝......它解決了......非常快......再次感謝 – user1515656 2012-07-10 20:19:52
UPDATE:
List<String> listA = Arrays.asList("Red", "Black", "Red", "Black", "Green", "Green", "Brown", "Black", "Brown", "Green");
List<String> listB = Arrays.asList("Red", "Brown", "Green");
for (String color : listB) {
System.out.println(string + " " + Collections.frequency(listA, color));
}
感謝您的回覆。我想我沒有把我的問題寫得很好 – user1515656 2012-07-10 18:18:27
我舉了一個例子來說明問題。任何幫助表示讚賞。另外我想要一個代碼進行了優化,當有大量元素時可以快速完成代碼 – user1515656 2012-07-10 18:22:56
您是否至少首先嚐試了這個? – Reimeus 2012-07-10 18:25:31
在谷歌番石榴的「多集」界面看看:
MultiSet<String> multiSet = HashMultiSet.create(listA);
for (String s : listB) {
multiSet.count(s);
}
你總是可以通過直接在多集存儲你的元素,而不是一個列表的獲得更好的性能。但是這取決於你想用它做什麼,因爲MultiSet實現了Collection接口,而不是List。
這是功課嗎? – 2012-07-10 18:04:20
您可以先看一下'java.utils.Collections.frequency'方法。 – 2012-07-10 18:05:55
Collections.frequency似乎很慢。我希望能夠快速完成日誌列表的操作。 – user1515656 2012-07-10 18:38:40