API - String 和 ArrayList

01 API是什么

答:API 全称 Application Programming Interfaace 应用程序编程接口。就是别人写好的一些程序,我们可以使用它们去解决相关问题。

02 为什么要学API

答:不要重复造轮子。Java已经有20多年的历史了,在这20多年里Java已经沉淀了很多优秀的程序,每一个程序可以用来解决一个问题,如果我们掌握得越多,那么我们的编程能力也就会越强,并且很多事情我们就可以不自己干了,直接调用别人的程序开发效率也会越高。

03 包

【1】概念:包就是文件夹,是用来分门别类管理程序的。

【2】如何在idea中建包:右键单机src --》点击new --》点击package

如果在src下直接创建类,则在java文件的第一行不会出现package语句;如果在自定义包下创建类,则idea会在java文件的第一行自动写上 package 完整路径;这条语句,例如:package bag;

【3】在自己程序中使用其包中的类:

04 String

【1】所在包:import java.lang.String;

【2】功能:封装字符串数据,对字符串数据进行处理。

【3】创建字符串对象:

【4】打印:String内部重写了toString方法,所以可以用sout直接打印字符串对象里的内容。

【5】String类中常用方法:

 注意:是substring,不是subString

【6】遍历字符串:

【7】注意事项:

   ① 字符串对象的不可变性,内存原理:

为main方法开辟栈帧空间 --》加载String类 --》在main方法的栈帧中为name变量开辟空间 --》以""写出的字符串对象会存储在堆区的字符串常量池中 --》把"黑马"的地址给name变量记住 --》把以""写出的字符串对象"程序员"放到堆区的字符串常量池中 --》以+号拼接的字符串对象会存储在堆区中 --》把堆区"黑马程序员"的地址给name变量记住 --》把以""写出的字符串对象"播妞"放到堆区的字符串常量池中 --》以+号拼接的字符串对象会存储在堆区中 --》把堆区"黑马程序员播妞"的地址给name变量记住。

结论:每次试图改变字符串对象实际上是新产生了新的字符串对象,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。

② 只要是以""写出来的字符串对象都是存储在堆区的字符串常量池中的,且相同的内容只会存一份。Java为什么要把以""写出来的字符串放在常量池中,且只存一份呢?答:为了节约内存。比如只要是""写出的播妞即使有几千个,在内存中只会有一份,且字符串对象具有不可变性,也保证了它的内容不可变。

③ 通过new方式创建的字符串对象,每new一次都会产生一个新的对象放在堆区内存中。

 【8】相关习题:

下图代码中,为什么"a"+"b"+"c"在编译阶段被优化成了“abc”,而s2 + "c"没有在编译阶段被优化,是因为,s2是一个变量只有在运行的时候才知道里面是什么而"a","b",“c”是常量,编译器可以在编译器期间自动优化,以便减少后序在运行过程中的计算,这也导致了s1和s都指向着常量池中的“abc”。要验证"a"+"b"+"c"在编译阶段是否真的被优化成了“abc”,可以通过反汇编来查看。

 04 案例:用户登录

代码位置:用户登录.txt

05 案例:使用String生成验证码

代码位置:使用String生成验证码.txt

06 ArrayList

【1】介绍:集合是一种容器,用于存储数据的。

【2】说明:如果在创建对象时直接写ArrayList则表示这个容器内可以存储任意类型的数据;如果在创建对象时写ArrayList<E>则可以指定这个容器可以存储什么数据。

【3】构造器的介绍:

   ① ArrayList() :如果在实例化ArrayList<E>对象时调用的是不带参数的构造器则,编译器会默认让顺序表指向一个大小为0的Object[]常量数组。

   ② ArrayList(int):如果在实例化ArrayList<E>对象时调用的是参数为int的构造器则,如果initialCapacity的值大于0,则实例化一个大小为initialCapacity大小的Object[]类型的数组,如果initialCapacity的值等于0,则编译器会让顺序表指向一个大小为0的常量Object[]数组,如果initialCapacity的值小于0,则会抛出异常。

  ③ ArrayList(Collection<? extends E> c):

      -   在实例化ArrayList对象时可以给构造器传引用数据类型的对象,但是对象的类型必须实现了Collection接口,且接口的<>里得是E或E的子类,其中E表示ArrayList中<>的泛型。

      -   下图中我们将arrayList对象作为参数传递给了ArrayList<E>的构造方法,为什么不报错,而将arrayList3对象作为参数传递给了ArrayList<E>的构造方法,为什么报错?

         答:不能将ArrayList<Integer>理解成Integer的子类,arrayList传入之所以符合是因为,它的类型ArrayList<Integer>,ArrayList实现了Collection接口,而<>中的Integer也是E的子类所以可以,如果把arrayList的类型修改成ArrayList<String>,String不是E的子类,在编译器中可以看到是不可以的。

 【4】ArrayList中常用的方法:

   ① boolean add(E e):

      -  了解完ArrayLisr<E>的构造器后,我们会发现在ArrayList<E>类中如果不明确指定顺序表的大小,则编译器在构造器初始化顺序表时会让顺序表指向一个大小为0的Object[]类型的数组,如果我们直接在实例化ArrayList<E>对象后,使用对象的引用调用add方法,会发现编译器并没有报错,可是顺序表的大小不是0吗,我们也没看到扩容操作啊,为什么不报错呢?

      -   答:如下图所示,我们观察到add方法内部的代码,发现在给顺序表有效数据后插入新的数据前,会先判断顺序表的大小和有效数组个数size的大小是否相等,如果相等,表示需要先对顺序表进行扩容操作,具体的扩容细节见下图所示,如果是因为顺序表本身就没开辟空间,则会将顺序表的大小设置成10(此时顺序表指向的是一个新的数组),如果是因为顺序表已满,则将顺序表按照原本大小的1.5被扩容。总之,之所以没报错的原因是,add方法里存在扩容代码。

  ② E remove(int index) 和 boolean remove(Object o):

      E remove(int index) :删除 index 位置元素,并返回被删除的值

      boolean remove(Object o):删除遇到的第一个 o

      注意:在给remove方法传参时,如果传递的是整型,编译器只会把它认为是下标,而不会认为是你想删除顺序表中第一次出现的元素10,如果想达到删除顺序表中第一次出现的元素10,得先将10装箱,示例代码:arrayList.remove(Integer.valueOf(10))

  ③ List subList(int fromIndex, int toIndex):

       List<E> subList(int fromIndex, int toIndex):截取部分 list,左闭右开(注意一下该方法的返回值为List<E>,接收subList方法的返回值时得用List<>类型的引用接收)。

      注意:使用subList截取的结果并不是重新new了一个数组存放的截取部分,而是返回了顺序表中下标为formLindex元素的地址。如果我们修改了截取部分数组中的元素的值,顺序表中的对应部分元素的值也会同时发生改变。

【5】打印:ArrayList内部重写了toString方法,所以可以用sout直接打印对象里的内容。 

07 案例:批量删除容器中的某元素

关键点,批量删除时怎样避免漏删元素:法一:每次删除成功就让i--, 法二:从容器后面开始遍历

代码位置:批量删除容器中的某元素.txt

08 案例:上架菜品和展示菜品

 代码位置:上架菜品和展示菜品.txt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图新地球-将地图上大量的地标点批量输出坐标到csv文件【kml转excel】

0.序 有很多用户需要在卫星影像、或者无人机航测影像、倾斜模型上去标记一些地物的位置&#xff08;如电线杆塔、重点单位、下水盖等&#xff09; 标记的位置最终又需要提交坐标文本文件给上级单位或者其他部门使用&#xff0c;甚至需要转为平面直角坐标。 本文的重点是通过of…

【C++】模板进阶:深入解析模板特化

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与Queue 本章将…

加密与安全_优雅存储用户密码的最佳实践

文章目录 Pre概述最佳实践避免使用MD5、SHA1等快速哈希算法加盐哈希 &#xff08;不推荐&#xff09;使用BCrypt、Argon2等慢哈希算法 (推荐)BCrypt Code1. 自动生成和嵌入盐2. 哈希结果的格式3. 代价因子 BCrypt特点 防止暴力破解1. 登录失败锁定2. 双因素认证&#xff08;2FA…

Java应用压测工具JMeter

目录 1、下载JMeter 2、配置环境变量 3、配置语音 4、使用 1、下载JMeter Apache JMeter - Apache JMeter™ 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错 下载这个&#xff0c;失败多下载几次 2、配置环…

react 高阶组件

概述 高级组件到底能够解决什么问题&#xff1f;举一个特别简单的例子&#xff0c;话说小明负责开发一个 web 应用&#xff0c;应用的结构如下所示&#xff0c;而且这个功能小明已经开发完了。 但是&#xff0c;有一天老板突然提出了一个权限隔离的需求&#xff0c;就是部分模…

自动下载网易云音乐歌手全部歌曲工具

自动下载网易云音乐歌手全部歌曲工具 使用说明 下载 地址 运行 双击运行对应版本文件 开发 安装依赖&#xff0c;运行 yarn yarn start打包 yarn pkg

实习期间git的分枝管理以及最常用的命令

各位找工作实习的友友在工作之前一定要把git的相关知识掌握呀&#xff0c;我实现期间被leader说过关于git规范的相关问题了 目前已更新系列&#xff1a; 当前&#xff1a;:实习期间git的分枝管理以及最常用的命令 Redis高级-----持久化AOF、RDB原理 Redis高级---面试总结5种…

python绘制3d建筑

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据 def generate_building_blocks(num_blocks, grid_size100, height_range(5, 50), base_size_range(10, 30)):buildings []for _ in range(…

中间件安全(一)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一&#xff0c;中间件。 1&#xff0c;什么是中间件。 是一类能够为一种或多种应用程序合作互通、资源共享&#xff0c;同时还能够为该应用程序提供相关的服务的软件。中间件是一类…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前数据吞吐量(Python)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK里函数来获取相机当前数据吞吐量&#xff08;Python&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在NEOAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过NEOAPI…

如何评估土壤功能?瓦赫宁根大学研究团队在土壤学一区TOP期刊最新成果给出答案!

本文首发于“生态学者”微信公众号&#xff01; 土壤健康是农业可持续发展的关键因素之一&#xff0c;而土壤有机碳&#xff08;Soil Organic Carbon, SOC&#xff09;含量是衡量土壤健康最常用的指标。然而&#xff0c;许多土壤功能不仅受SOC总量的影响&#xff0c;还与其质量…

【1】OpenCV虚拟环境搭建

文章目录 OpenCV虚拟环境搭建&#xff08;一&#xff09;安装anaconda&#xff08;二&#xff09;anaconda修改虚拟环境默认位置STEP1&#xff1a;找到C:\Users\你的用户名下的.condarc文件STEP2&#xff1a;修改指定文件夹的权限&#xff08;重点&#xff09; &#xff08;三&…

Java【异常处理】

机制概述 JVM用方法调用栈来跟踪一系列方法的调用过程&#xff0c;位于栈顶的是正在执行的方法&#xff0c;当一个方法抛出异常时&#xff0c;根据代码处理异常。 异常常见类型 检查性异常&#xff1a;最具代表的检查性异常是用户错误或问题引起的异常&#xff0c;这些异常在…

物品识别——基于python语言

目录 1.物品识别 2.模型介绍 3.文件框架 4.代码示例 4.1 camera.py 4.2 interaction.py 4.3 object_detection.py 4.4 main.py 4.5 运行结果 5.总结 1.物品识别 该项目使用Python&#xff0c;OpenCV进行图像捕捉&#xff0c;进行物品识别。我们将使用YOLO&#xff08…

『功能项目』切换职业面板【48】

我们打开上一篇47技能冷却蒙版的项目&#xff0c; 本章要做的事情是切换职业UI面板的功能 首先双击打开Canvas预制体在左上主角面板信息中新建一个button按钮 重命名&#xff08;父物体是按钮Button&#xff0c;子物体Image即可&#xff09; 创建一个Image 设计一下布局 复制三…

CMS之Wordpress建设

下载 https://cn.wordpress.org/ 宝塔安装Wordpress 创建网站 上传文件、并解压、剪切文件到项目根目录 安装 -> 数据库信息 -> 标题信息 http://wordpress.xxxxx.com 登录 http://wordpress.xxxxxxxxx.com/wp-admin/ 1. 主题(模板) wordpress-基本使用-02-在主题…

LabVIEW中AVI帧转图像数据

在LabVIEW中&#xff0c;有时需要将AVI视频文件的帧转换为图像数据进行进一步处理。下面详细讲解了如何从AVI视频提取单帧并将其转换为图像数据集群&#xff0c;以便与其他图像处理VI兼容。 问题背景&#xff1a; 用户已经拥有能够处理JPEG图像数据集群的VI&#xff0c;现在希…

通信工程学习:什么是接入网(AN)中的TF传送功能

接入网&#xff08;AN&#xff09;中的TF传送功能 在通信工程中&#xff0c;TF&#xff08;Transfer Function&#xff09;传送功能是指为接入网&#xff08;AN&#xff09;不同位置之间提供通道和传输介质&#xff0c;以实现数据的有效传输。以下是关于TF传送功能的详细解释&a…

【Elasticsearch系列七】索引 crud

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux:进程状态和优先级

一、进程状态 1.1 操作系统学科&#xff08;运行、阻塞、挂起&#xff09; 为了弄明白正在运行的进程是什么意思&#xff0c;我们需要知道进程的不同状态 大多数操作系统都遵循以下原则 1.1.1 运行状态 因为有一个调度器需要确保CPU的资源被合理使用&#xff0c;所以需要维护…