gpt4 book ai didi

java - 如何计算 ArrayList 中的元素在另一个 ArrayList 中出现的频率?

转载 作者:行者123 更新时间:2023-12-03 11:18:44 25 4
gpt4 key购买 nike

我想计算来自 ArrayList“list1”的元素在另一个 ArrayList“list2”中出现的频率。
我想要这个输出:

A 2
B 0
C 1
D 2
我得到这个输出:
A 0
B 0
C 0
D 69
你能帮我做这个吗?
谢谢!
enter code here

HashMap<Character, Integer> map = new HashMap<Character, Integer>();
ArrayList<Character> list1 = new ArrayList<Character>();
ArrayList<Character> list2 = new ArrayList<Character>();

Collections.addAll(list1, 'A', 'B', 'C', 'D');
Collections.addAll(list2, 'D', 'A', 'C', 'A', 'D');

for (int i = 0; i < list1.size(); i++) {

for (int j = 0; j < list2.size(); j++) {


if (list1.get(i) == list2.get(j)) {
map.put(list1.get(i), 1);
}

if (list1.get(i) == list2.get(j) && (map.containsKey(list1.get(i)))) {
map.replace(list1.get(i), list1.get(i) + 1);
}

if (list1.get(i) != list2.get(j)) {
map.put(list1.get(i), 0);
}

}
}


System.out.println("Map: ");
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}

最佳答案

使用方法frequency ,来自 Collection ,即:

    for (Character c : list1)
map.put(c, Collections.frequency(list2, c));

System.out.println("Map: ");
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
如果你是一个类轮的粉丝:
    list1.forEach(c -> map.put(c, Collections.frequency(list2, c)));
包括元素的打印:
list1.forEach(c ->  System.out.printf("%s %d%n", c, Collections.frequency(list2, c)));
顺便说一句,您的原始答案几乎是正确的,您只需要重新考虑条件句及其顺序:
 for (Character c1 : list1) {
for (Character c2 : list2) {
if(map.containsKey(c1) && c1 == c2 ){
map.put(c1, map.get(c1) + 1);
}
else if (!map.containsKey(c1) && c1 != c2 ) {
map.put(c1, 0);
}
else if (!map.containsKey(c1) && c1 == c2) {
map.put(c1, 1);
}
}
}
另一个建议是,如果您不明确需要循环索引,最好使用习语 for (Character c1 : list1)而不是 for(int i = 0; i < list1.size(); i++) .第一个版本比第二个版本更干净,更不容易出错。此外,您可以使用变量 c1而不是必须做 list1.get(i)每时每刻。

关于java - 如何计算 ArrayList 中的元素在另一个 ArrayList 中出现的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64942005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com