数据结构(Java):ArrayList的应用

news2024/11/16 17:39:34

1、引言

上一篇博客,已经为大家讲解了集合类ArrayList。

这篇博客,就来帮助大家学会使用ArrayList。

2、题1: 删除字符(热身题)

题目:给出str1和str2两个字符串,删除str1中出现的所有的str2的字符(不用改变str1本身),使用集合类ArrayList将这些字符存储到顺序表中。

示例:

str1:Welcome to China!

str2:Wow!Grand!

删除后的结果:elcme t Chi

 解题思路:借助String类提供的方法,完成解答。

详细的String类方法在这篇博客:JavaSE:String类常用方法(巨详细)-CSDN博客

解题代码:

public class Test {
    public static void removeData(String str1,String str2,ArrayList<Character> list) {
        int size = str1.length();
        for (int i = 0; i < size; i++) {
            char ch = str1.charAt(i);
            if (!str2.contains(ch+"")) {//注意这里!神来之笔!技巧:字符型+"" 就得到了一个字符串!!!
                list.add(ch);
            }
        }
    }
    public static void main(String[] args) {
        ArrayList<Character> list = new ArrayList<>();
        String str1 = "Welcome to China!";
        String str2 = "Wow!Grand!";
        removeData(str1,str2,list);
        int size = list.size();
        for (int i = 0; i < size; i++) {
            System.out.print(list.get(i));
        }
        System.out.println();//习惯性换行
    }
}

这道题目是非常简单的,我的目的就是让大家记住这个技巧:

字符型+""  就得到了一个字符串!!!

3、题2:杨辉三角

这道题目来自于力扣:杨辉三角-力扣(LeetCode)

                              杨辉三角:

3.1 思路分析

3.1.1 类型分析之 List<List<Integer>>

我们发现方法的返回值类型为:List<List<Integer>>

如果你是第一次遇见这种类型,是不是给懵住了,哈哈,不要慌。

其实这种类型可以理解为一个二维数组

我们知道,对于ArrayList,我们传入的类型参数是什么,那这个顺序表存储的就是什么类型的数据。那么对于List<List<Integer>> 说明顺序表的元素类型为泛型类List<Integer> ,也就是说该顺序表的每个元素又都是一个顺序表。

存储形式如下图:

故,我们可以理解为一个二维数组。

3.1.2 结构分析和存储

而对于杨辉三角,虽然看起来是一个三角形,但如果我们使用代码来实现,只能存储在二维数组中。

而题目的返回值为List<List<Integer>>  ,所以我们可以借助ArrayList构造二维数组,实现数据的存储,实现杨辉三角。

3.1.3 数据分析

根据上面两张图,我们可以发现:

1.第一行只有一个元素1

2. 每一行的第一列和最后一列元素均为1

3. 中间列的元素等于上一行同一列的元素加上上一行前一列的元素之和

也就是说,我们需要对第一行、每一行的第一列最后一列、中间列的元素分别进行处理。

相信大家到这里心中已经有了解题思路,大家可以先自己试着完成,下面我会给出题解。

3.2 解题代码

public List<List<Integer>> generate(int numRows) {
            ArrayList<List<Integer>> list = new ArrayList<>();
            for (int i = 0; i < numRows; i++) {
                list.add(new ArrayList<Integer>());
            }
            //第一行 只有一个元素 特殊处理
            list.get(0).add(1);

            //后面行
            for (int i = 1; i < numRows; i++) {
                //第1列
                list.get(i).add(1);
                //中间数据
                for (int j = 1; j < list.get(i - 1).size(); j++) {
                    //第i行第j列元素 = 第i-1行第j-1列元素 + 第i-1行第j列元素
                    //a[i][j] = a[i-1][j-1] + a[i-1][j]
                    int data1 = list.get(i - 1).get(j - 1);
                    int data2 = list.get(i - 1).get(j);
                    list.get(i).add(data1 + data2);
                }
                //最后一列
                list.get(i).add(1);
            }
            return list;
    }

 4、题3:洗牌算法

题目:有三个人,他们去买了一副扑克牌,将大小王抽出,再将剩下的52张牌进行洗牌,洗完牌后,每个人轮流摸一张牌,共摸牌五轮。(牌有♥、♠、♦、♣之分,牌的大小用数字1~13表示)

问题1:请用代码完成洗牌操作,并展示洗完的牌

问题2:请用代码完成摸牌操作,并展示每人摸到的牌

4.1 思路分析

对于这道题,我们需要明确要构建出哪些对象。

首先,肯定要有牌;再者,要有存放52张牌的顺序表;然后,要有另外三个顺序表,来存放三个人各自所摸到的牌。

所以,步骤如下:

1. 提供牌的类,有花色和数字这两个属性。

2. 构建算法,生成52张牌(注意有花色4种和数字13个),放到顺序表中。

3. 构建算法,进行洗牌操作(打乱存放牌的顺序表)。

4. 构建算法,进行摸牌操作,并存放三个人各自摸到的牌。

ps: 步骤4中, 我们可以利用上文所学到的顺序表构建二维数组的方式存放各自的牌。如下图:

4.2 解题代码

public class Card {
    private String suit;
    private int rank;

    public Card(String suit, int rank) {
        this.suit = suit;//花色
        this.rank = rank;//数字
    }

    @Override
    public String toString() {
        return "{" + suit + rank + "}";
    }
}

import java.util.ArrayList;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: dings
 * Date: 2024-06-26
 * Time: 16:14
 */
public class Test {
    public static void buyCard(ArrayList<Card> listCard) {
        //买52张牌
        String[] suit = {"♥","♠","♦","♣"};//红桃、黑桃、方片、梅花
        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < 4; j++) {
                listCard.add(new Card(suit[j],i ));
            }
        }
    }
    public static void shuffleCard(ArrayList<Card> listCard) {
        //洗牌
        int size = listCard.size();//52
        Random ran = new Random();
        for (int i = size - 1; i > 0; i--) {
            int random = ran.nextInt(i);//生成的随机数范围为:[0,i)
            //交换位置
            Card card = listCard.get(i);
            listCard.set(i,listCard.get(random));
            listCard.set(random,card);
        }
    }
    public static void main(String[] args) {
        ArrayList<Card> listCard = new ArrayList<>();
        //生成52张牌
        buyCard(listCard);
        System.out.println("生成的52张有序牌:"+listCard);
        //洗牌
        shuffleCard(listCard);
        System.out.println("打乱后的牌:"+listCard);
        //摸牌(3人轮流摸牌 摸5轮)
        ArrayList<ArrayList<Card>> listPeo = new ArrayList<>();
        listPeo.add(new ArrayList<>());
        listPeo.add(new ArrayList<>());
        listPeo.add(new ArrayList<>());
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = listCard.remove(0);
                listPeo.get(j).add(card);
            }
        }
        System.out.println("===摸牌===");
        for (int i = 0; i < 3; i++) {
            System.out.println("第"+(i+1)+"个人的牌:"+listPeo.get(i));
        }
        System.out.println("===剩余的牌===");
        System.out.println(listCard);
    }
}

4.3 运行演示

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

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

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

相关文章

kafka进阶核心原理详解:案例解析(第11天)

系列文章目录 kafka高级&#xff08;重点&#xff09; kafka核心概念汇总 kafka的数据位移offset Kafka的基准/压力测试 Kafka的分片副本机制 kafka如何保证数据不丢失 kafka的消息存储及查询机制 生产者数据分发策略 消费者负载均衡机制 kafka的监控工具:kafka-eagle…

基于Java的多元化智能选课系统-计算机毕业设计源码040909

摘 要 多元化智能选课系统使用Java语言的Springboot框架&#xff0c;采用MVVM模式进行开发&#xff0c;数据方面主要采用的是微软的Mysql关系型数据库来作为数据存储媒介&#xff0c;配合前台技术完成系统的开发。 论文主要论述了如何使用JAVA语言开发一个多元化智能选课系统&a…

本地调试时不将服务挂到nacos

本地调试的时候不将服务挂到nacos从而影响前端和测试使用&#xff0c;需要在edit Configurations...加入一句配置信息。 -Dspring.cloud.nacos.discovery.register-enabledfalse

Flutter Navigator.popUntil 参数传递

Flutter 使用页面传参 以下是 在flutter 中页面传参的常用形式&#xff0c;都可以有有直接的传值参数提供。 Navigator.push #跳转到指定页面 压栈路由表Navigator.pushReplacement #关闭当前页面 跳转到指定页面压栈路由表Navigator.pus…

JMeter安装与使用

安装包下载&#xff1a;https://pan.xunlei.com/s/VNigSM9IEjqNBVkw8by6i-LoA1?pwdu6gq# 也可以官网下载&#xff1a; 1.解压安装包 2.打开方式 &#xff08;1&#xff09;bin->ApacheJMeter.jar->打开界面 &#xff08;2&#xff09;如果&#xff08;1&#xff09;打…

Node.js全栈指南:认识MIME和HTTP

MIME&#xff0c;全称 “多用途互联网邮件扩展类型”。 这名称相当学术&#xff0c;用人话来说就是&#xff1a; 我们浏览一个网页的时候&#xff0c;之所以能看到 html 文件展示成网页&#xff0c;图片可以正常显示&#xff0c;css 样式能正常影响网页效果&#xff0c;js 脚…

Xilinx FPGA:vivado这里记录一个小小的问题

问题描述&#xff1a;uart_data从rx模块输入到ctrl模块后就没有值了。 问题一&#xff1a;首先我仿真例化了两个模块&#xff0c;并且&#xff0c;我选取了单独例化的rx模块中的uart_data 的值&#xff0c;所以在仿真中它是有值的。 timescale 1ns / 1ps module test_bench_TO…

如何高效使用 .http 文件记录和测试API接口

1. 前言 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;成为了系统间通信的重要桥梁。.http 文件作为一种轻量级的API请求描述方式&#xff0c;不仅便于开发者记录和分享API接口信息&#xff0c;还能够帮助自动化测试流程。本文将深入介绍如何有效地使…

【论文阅读】-- MultiStream:探索分层时间序列的多分辨率流图方法

MultiStream: A Multiresolution Streamgraph Approach to Explore Hierarchical Time Series 摘要1 引言2相关工作2.1 堆叠图和流图可视化2.2 时间序列的层次结构2.3 交互技术 3 需求分析4 视觉映射和功能4.1 设计原理总结4.2 概述4.3 多分辨率视图4.4 控制器4.5 层次管理器 5…

【知识学习】阐述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;雾效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;细节层次&#xff09;是两种用于提高场景视觉效果和性能的技术。 Fog&#xff08;雾效&#xff09; 雾效是一种视觉效果&#xff0c;用于模拟大气中的雾或烟&#xff0c…

纠结要不要选计算机专业,问问自己这个问题

又到了一年一度高考填志愿的时候&#xff0c;几年前我做过一个介绍计算机专业的视频。有需要的同学可以去看下 有人看完视频问我&#xff1a; 你到底是在推荐还是在劝退计算机&#xff1f; 还有人说&#xff1a; 我也不知道自己对计算机有没有兴趣&#xff0c;怎么办&#xff1…

应用案例 | 如何监测高价值货物在物流运输过程中受到的振动和冲击?全面保障货物安全

一、货物运输 不同种类的货物对运输的要求不同&#xff0c;钢铁、煤炭、矿石等大宗物资通常对运输要求较低&#xff0c;而电子产品、IT 产品、家电等高价值敏感类货物则更强调运输的安全性和时效性&#xff0c;往往希望能尽可能安全和快速送达这类货物&#xff0c;使之尽快进入…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇&#xff0c;分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》&#xff0c;3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

计算机网络面试TCP篇之TCP三次握手与四次挥手

TCP 三次握手与四次挥手面试题 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 巨巨巨巨长的提纲&#xff0c;发车&#xff01;发车&#xff01; PS&#xff1a;本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识&#xff0c;这些知识在这篇&#xff1a; TCP …

神州信息与国科量子联合进军量子网络应用服务市场(中国军民两用通信技术展览会)

量子通信&#xff0c;智联未来 —— 神州信息与国科量子共启安全通信新纪元 在信息技术飞速发展的今天&#xff0c;信息安全已成为全球关注的焦点。神州数码信息服务股份有限公司&#xff08;神州信息&#xff09;与国科量子通信网络有限公司&#xff08;国科量子&#xff09;…

PyCharm 2024.1最新变化

PyCharm 2024.1 版本带来了一系列激动人心的新功能和改进&#xff0c;以下是一些主要的更新亮点: Hugging Face 模型和数据集文档预览&#xff1a;在 PyCharm 内部快速获取 Hugging Face 模型或数据集的详细信息&#xff0c;通过鼠标悬停或使用 F1 键打开文档工具窗口来预览。 …

【数据结构】--栈

&#x1f44c;个人主页: 起名字真南 &#x1f923;个人专栏:【数据结构初阶】 【C语言】 目录 1 栈1.1 栈的概念和结构1.2 栈的实现1.2.1 头文件1.2.2 初始化1.2.3 销毁1.2.4 打印所有元素1.2.5 入栈1.2.6 出栈1.2.7 获取栈顶数据1.2.8 判空1.2.9 获取元素个数 1 栈 1.1 栈的概…

Element-UI 并排显示多个 disabled按钮的时候, 不生效问题解决

目录 Element-UI 并排显示多个 disabled按钮的时候&#xff0c; 不生效问题解决 解决方法&#xff1a; 运行结果&#xff1a; Element-UI 并排显示多个 disabled按钮的时候&#xff0c; 不生效问题解决 解决方法&#xff1a; Element-UI 并排显示多个 disabled按钮的时候&a…

测绘局内外网文件导入导出,怎样才能效率安全两手抓?

测绘局负责进行各种基础测绘工作&#xff0c;如地形测量、地籍测绘、海洋测绘等&#xff0c;获取并更新国家基础地理信息数据。这些数据是国民经济建设、城市规划、资源调查、环境保护等各个领域的重要基础资料。对于维护国家地理信息安全、促进国民经济和社会发展具有重要意义…

空间转录组学联合单细胞转录组学揭示卵巢癌生存相关受配体对

卵巢癌&#xff0c;作为女性生殖系统中的一种常见恶性肿瘤&#xff0c;其高级别浆液性卵巢癌&#xff08;HGSC&#xff09;亚型尤其致命。尽管多数患者对初次治疗反应良好&#xff0c;但超过75%的晚期HGSC患者会在治疗后复发&#xff0c;并且对化疗药物产生耐药性。然而&#x…