找出一个List中每个元素出现的次数

news2024/11/25 8:11:07

文章目录

  • 一、需求:找出一个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运行结果:

123

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 运行结果:

456

2.3 案例分析:

  1. 在这个示例中,我们首先创建了一个包含列表中所有元素的HashSet(uniqueElements)。这将自动去除重复元素,确保每个元素只计算一次。

  2. 然后,我们使用for-each循环遍历uniqueElements集合中的每个元素。对于每个元素,我们使用Collections类的frequency()方法来计算该元素在列表中出现的次数,并将结果存储在frequency变量中。

  3. 最后,我们输出元素和对应的出现次数。

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,并输出每个元素和其出现的次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask学习笔记(2)应用部署

本文将介绍如何部署Flask应用。   部署Flask应用&#xff0c;主要是要运用多线程与多进程&#xff0c;提高接口的并发能力。我们以下面的Python代码&#xff08;server.py&#xff09;为例进行演示&#xff1a; # -*- coding: utf-8 -*- import time import datetime from f…

04-HAL库UART配置及协议解析设计

本节内容介绍 1、HAL库UART 在cubemx中的配置及注意事项;2、HAL库UART详解与结构介绍;3、实现简单地UART数据收发&#xff1b; 源码地址&#xff1a; HAL库UART在cubemx中的配置 串口原理图 串口1咱们已经用作rtt的print使用了&#xff0c;所以使用另外一组串口来进行串口…

android studio 4.0以上隐藏调用方法参数名提示

引入&#xff1a; android studio在编辑代码的时候&#xff0c;调用函数时会接口处会自动提示参数名&#xff0c;方便代码书写时对传参命名的规范性。 可以如果代码是魂效过的&#xff0c;那会适得其反&#xff0c;l,l1,l2,i,i1,i2这样的参数名提醒反而会混淆视听。 这时候可…

图书馆机器人的应用,科技助力新趋势

随着科技的发展和智能化时代的到来&#xff0c;图书馆越来越多地引入了机器人作为服务和管理的工具。图书馆机器人可以轻松地完成多种任务&#xff0c;包括为用户提供导航服务、管理借还书、整理图书、清扫图书馆等。 首先&#xff0c;图书馆机器人可以为用户提供导航服务。在庞…

讲讲仿真软件的文件导入

仿真软件识别导入的设计文档是有区别的&#xff0c;实际的使用经历&#xff0c;ADS只是用于搭建Channel通道仿真&#xff0c;那本文以Cadence的Sigrity和Ansys的SIwave为例&#xff0c;讲讲仿真软件的文件导入。 先以Sigrity为例&#xff0c;打开软件&#xff0c;File 菜单Open…

记一次 JVM 参数调整导致 ShardingSphere-Proxy 性能下降的问题排查过程

问题现象 在性能测试中&#xff0c;分别对两个版本差异间隔一天的 ShardingSphere-Proxy 做性能测试&#xff0c;发现版本更新的 Proxy 比旧的 Proxy 在 TPC-C 场景下峰值 tpmC 下降了 7% 左右。 排查过程 在性能测试期间&#xff0c;使用 async-profiler 分别对两个进程进行…

根据aop实现自定义缓存注解

根据aop实现自定义缓存注解 自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit;/*** author: yanche…

ESP32通过Arduino导出编译bin文件并进行量产烧录

ESP32通过Arduino导出编译bin文件并进行量产烧录 文章目录 ESP32通过Arduino导出编译bin文件并进行量产烧录Arduino导出编译的bin文件方法一&#xff1a;通过Arduino IDE提供的工具导出编译文件方法二&#xff1a;到编译生成的临时文件目录进行查找 弄清楚Arduino的编译烧录过程…

Unity3D:工具栏

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 工具栏 在 Unity Editor 顶部可以看到工具栏。 工具栏不是窗口&#xff0c;是 Unity 界面中唯一无法重新排列的部分。 有关场景视图中的其他工具&#xff0c;请参阅叠加。 工具栏…

记录一次使用thinkphp5分页器获取数据

// 输出当前页 $nowPage $data->currentPage(); // 输出总条数 $total $data->total(); // 输出当前页条数 $listRows $data->listRows();db(tablename)->where("id > 0")->paginate(10,true,[page>4]); //每页显示10条记录&#xff0c;且打…

C#(五十一)之特性

特性是用于为程序元素添加额外信息的一种机制。比如记录文件修改时间、提示某方法已经过期等。方法、变量、属性、类、接口、结构体以及程序及都是程序元素 Obsolete第二个参数设置为true,调用此方法会产生警告并引起编译器报错 百度了一下C#还有其他的特性以及自定义特性&am…

基于ssm实现图书商城(spring+springmvc+mybatis)

一、项目功能 前台 图书基本展示,包括推荐图书展示和类图书类型展示.推荐图书包括条幅推荐,热销推荐和新品推荐.按照图书类型展示商品.图书详细信息展示.图书加入购物车.修改购物车内图书信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款.用户…

前置声明、源文件include、编译链接顺序问题

TestB.h (前置声明&#xff0c;无需在源文件include)重点&#xff1a; 1.前置声明用在指针变量使用&#xff0c;无需在头文件或源文件include 2.继承或者普通变量在头文件使用的时候(除非所有的编译顺序都正确&#xff0c;才能在源文件include)&#xff0c;最好不要在源文件i…

汇编语言基础--内中断

在8086CPU实模式下有如下内存布局&#xff1a; 我们看到在000-3FF的位置是放着中断向量表。 里面放的其实是4个字节的地址&#xff08;地址处放着对应的中断处理函数&#xff09;。我们知道在8086实模式下&#xff0c;是通过cs:ip来找到要执行的指令。cs是2个字节&#xff0c;i…

chat2DB使用教程

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语…

Squid 缓存代理--反向代理

Squid 缓存代理–反向代理 反向代理&#xff1a;如果Squid反向代理服务器中缓存了该请求的资源&#xff0c;则将该请求的资源直接返回给客户端&#xff1a;否则反向代理服务器将向后台的WEB服务器请求资源&#xff0c;然后将请求的应答返回给客户端&#xff0c;同时也将应答缓…

VMware 虚拟磁盘格式

1.如果必须用FT &#xff0c; 只能选eagerzeroedthick 2.如果追求最佳应用性能不考虑空间占用 &#xff0c; 选eagerzeroedthick 3.如果希望最大成都的利用空间&#xff0c;并且对磁盘的增长是可控的&#xff0c;可以选thin格式 4.如果不希望空间的过量分配(oversubsribe)造…

OpenStack组件的基本使用

OpenStack组件的基本使用 Keystone命令行的方式项目用户角色 图形化界面方式项目用户角色 Glance命令行操作镜像上传下载管理镜像开放镜像权限转换镜像格式 图形化界面 Nova和Neutron命令行的方式实例类型密钥对安全组创建网络创建云主机启动关闭云主机 图形化界面创建实例类型…

【数据结构与算法】二叉树中从每个叶子结点到根结点的路径

题目 Qestion: 输出二叉树中从每个叶子结点到根结点的路径 数据结构与定义 #include <stdio.h> #include <stdlib.h>typedef struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right; } TreeNode;二叉树形状 核心代码 void LeafToRoot(TreeNod…

[网络安全提高篇] 一二一.恶意软件动态分析Cape沙箱Report报告的API序列批量提取详解

终于忙完初稿,开心地写一篇博客。 “网络安全提高班”新的100篇文章即将开启,包括Web渗透、内网渗透、靶场搭建、CVE复现、攻击溯源、实战及CTF总结,它将更加聚焦,更加深入,也是作者的慢慢成长史。换专业确实挺难的,Web渗透也是块硬骨头,但我也试试,看看自己未来四年究…