我在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