文章目录
- 一、需求:找出一个list中,每个元素出现的次数
- 1. 普通实现(hashmap):
- 1.1 代码实现:
- 1.2运行结果:
- 1.3 案例分析:
- 2. 普通实现(HashSet#Collections.frequency):
- 2.1 代码实现:
- 2.2 运行结果:
- 2.3 案例分析:
- 3. 高级用法(jdk8#groupingBy):
- 3.1 代码实现:
- 3.2 运行结果:
- 3.3 案例分析:
一、需求:找出一个list中,每个元素出现的次数
1. 普通实现(hashmap):
可以使用HashMap来统计列表中每个元素出现的次数。遍历列表,对于每个元素,将其作为键存储在HashMap中,值为该元素出现的次数。如果元素已经存在于HashMap中,则将对应的值加1。
1.1 代码实现:
以下是一个示例代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c", "a", "b", "a");
Map<String, Integer> frequencyMap = new HashMap<>();
for (String element : list) {
frequencyMap.put(element, frequencyMap.getOrDefault(element, 0) + 1);
}
for (Map.Entry<String, Integer> entry : frequencyMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
1.2运行结果:
1.3 案例分析:
在这个示例中,我们首先创建了一个包含一些字符串元素的List。然后,我们创建了一个HashMap来存储元素和其出现次数的映射关系。
接下来,我们遍历列表中的每个元素,对于每个元素,我们使用getOrDefault()方法获取其当前的计数值,并将其加1。然后,我们使用put()方法将元素和新的计数值存储在HashMap中。
最后,我们遍历HashMap的条目集,并输出每个元素以及其出现的次数。
2. 普通实现(HashSet#Collections.frequency):
我们定义一个包含所有元素的集合(Set),这样可以避免重复元素的重复计算。然后,我们遍历列表中的每个元素,对于每个元素,我们使用Collections类的frequency()方法来计算该元素在列表中出现的次数,并将结果存储在一个新的集合中。
2.1 代码实现:
以下是使用这种方法的示例代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c", "a", "b", "a");
Set<String> uniqueElements = new HashSet<>(list);
for (String element : uniqueElements) {
int frequency = Collections.frequency(list, element);
System.out.println(element + " : " + frequency);
}
}
}
2.2 运行结果:
2.3 案例分析:
-
在这个示例中,我们首先创建了一个包含列表中所有元素的HashSet(uniqueElements)。这将自动去除重复元素,确保每个元素只计算一次。
-
然后,我们使用for-each循环遍历uniqueElements集合中的每个元素。对于每个元素,我们使用Collections类的frequency()方法来计算该元素在列表中出现的次数,并将结果存储在frequency变量中。
-
最后,我们输出元素和对应的出现次数。
3. 高级用法(jdk8#groupingBy):
使用Java 8表达式可以很方便地找出一个List中每个元素出现的次数。可以使用Stream API中的groupingBy()方法来实现。
3.1 代码实现:
下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c", "a", "b", "a");
Map<String, Long> frequencyMap = list.stream()
.collect(Collectors.groupingBy(s -> s, Collectors.counting()));
for (Map.Entry<String, Long> entry : frequencyMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
3.2 运行结果:
3.3 案例分析:
在这个示例中,我们首先创建了一个包含一些字符串元素的List。然后,我们使用stream()方法将List转换为一个流。接下来,我们使用groupingBy()方法按照元素进行分组,并使用counting()方法计算每个元素出现的次数。最后,我们遍历结果的Map,并输出每个元素和其出现的次数。