做网站好吗/百度电脑版网页版入口
今日内容
零、 复习昨日
一、集合框架体系
二、Collection
三、泛型
四、迭代
五、List(ArrayList、LinkedList)
零、 复习
throw和throws什么区别
throw throws 位置 方法里面 方法签名上 怎么写 throw + 异常对象 throws+异常类名(多个) 作用 真正抛出异常对象 声明抛出的异常类型 运行时异常有哪些,什么特点
- 运行时异常,查异常类是否继承自RuntimeException
- 特点: 不用主动处理
- 别称: 不受检查异常
编译期异常有哪些,什么特点
- 只要不是RuntimeException及其子类,那都是编译期
- 特点: 必须处理
- 别称: 受检查异常(CheckedException)
异常的处理方式哪些,什么区别
- 抛出,代码停止
- 捕获,代码继续
finally干什么的
- 放在最后执行,其中写的释放资源的代码
一、集合框架体系
数组: 是一个容器,用来存放数据的
- 定长
- 只能存储同一种数据类型的数据
- int[] 可以存储int值,Student[] 可以存储引用类型
- 只有一个length属性,没有方法,使用时功能简单
集合: 是一个容器,用来存放数据的
- 不定长
- 存各种各样类型
- 只能存储引用类型
- 提供了操作数据的各种方法
集合体系
今天主要学习Collection,List,ArrayList,LinkedList…
二、Collection
Collection是
单列
集合层次结构中的根接口
一些 集合允许有重复的元素,而另一些则不允许。一些 集合是有序的,而另一些则是无序的
Collection下面的一些子实现类有些有重复元素,有些没有,有些可以有序,有些无序
方法: 每个都很常见,很重要
ps: Collection是接口,不能创建对象,为了演示这些API,需要使用子实现类,使用最常用的ArrayList集合来实现方法
public static void main(String[] args) {// Collection是接口,不能直接创建对象// 但是当做父引用指向子类对象Collection col = new ArrayList(); // 向上转型// 存放元素 add(Object o)col.add(1);// 1--> 自动装箱Integer对象 --> Objectcol.add("a");col.add(new Date( ));System.out.println(col );// 再创建集合Collection col2 = new ArrayList();col2.add(11);col2.add(22);col2.add(33);// 批量添加 addAll(Collection c)col.addAll(col2);// 将参数与集合中的所有数据都添加到当前集合System.out.println(col );// 移除元素// boolean remove(Object o) 删除指定元素boolean r1= col.remove(-11);System.out.println("删除是否成功:" + r1 );System.out.println("删除后: "+col );// boolean removeAll(Collection<?> c)// 批量删除// col.removeAll(col2);// 删除指定数据// System.out.println("批量删除后: " + col );// 保留全部(反向删除)// boolean retainAll(Collection<?> c)col.retainAll(col2);// 保留指定数据,删除其他数据System.out.println("保留全部"+col );// 删除全部数据(清空)// col.clear();// System.out.println("清空: "+col );// 获得集合大小(尺寸/容量)int size = col.size( );System.out.println(size );// 判断集合是否为空(没有元素,长度为0即为空)boolean empty = col.isEmpty( );System.out.println(empty );// 判断集合是否包含指定元素// containsboolean contains = col.contains(11);System.out.println("是否包含:" + contains );}
三、迭代[重要]
迭代 (遍历), 将集合元素迭代,目的是取出元素.
public static void main(String[] args) {Collection col = new ArrayList( );col.add(1);col.add(2);col.add(3);col.add(4);col.add(5);col.add(6);// 遍历(迭代)集合// 1) 获得迭代器Iterator iterator = col.iterator( );// 2) 通过迭代器完成迭代(遍历)while(iterator.hasNext()){// hasNext() 判断有无下一个Object o = iterator.next( );// next()取出下一个元素System.out.println(o );}}
增强for循环(foreach)
public static void main(String[] args) {Collection col = new ArrayList( );col.add(1);col.add(2);col.add(3);col.add(4);col.add(5);col.add(6);// 遍历(迭代)集合// 1) 获得迭代器Iterator iterator = col.iterator( );// 2) 通过迭代器完成迭代(遍历)while(iterator.hasNext()){// hasNext() 判断有无下一个Object o = iterator.next( );// next()取出下一个元素System.out.println(o );}// 使用增强for循环,改写迭代器遍历/*** for(数据类型 变量:集合/数组){** }* 1) 冒号右边是写要被遍历的集合或者数组对象* 2) 每次从集合或者数组取出的值赋值给左边变量*/System.out.println("-------" );for (Object o : col){System.out.println(o );}System.out.println("----------" );int[] arr = {11,22,33,44};for (int i : arr){System.out.println(i );}}
四、泛型
泛型在集合中主要是用来规定数据类型的.
语法: 设计时 <类型> , 例如
<E> <K> ,<K,V> <T>
ps: E,K,V,T这些都是见名知意的简写,其实是可以随意写的 使用时(创建类对象)指定泛型,即指定明确的数据类型
<String> <Integer>
作用:
- 约束集合存储的数据类型
- 避免数据类型转换
public static void main(String[] args) {// 没有泛型Collection col = new ArrayList();// 类型没有限制col.add(1);col.add("2");col.add(1.1);// for (Object o : col){// String s = (String) o;// }// 使用泛型Collection<String> col2 = new ArrayList<>();// 就可以限制数据类型col2.add("A");col2.add("B");for (String s : col2){System.out.println(s );}// 使用泛型Collection<Integer> col3 = new ArrayList<>();col3.add(1);col3.add(2);col3.add(3);for (Integer i : col3){System.out.println(i );}/*** 为什么要用泛型?* 1) 经验: 虽然集合可以存储多种数据类型,但是大部分场景都是只存同一种数据* 2) 最主要的原因是: 没有泛型,类型太杂,需要使用指定类型还需要强制* 但是强制还容易报错* 所以:泛型的好处就会可以约定数据类型,从而减少数据类型转型*/}
泛型: 可以研究泛型类,泛型参数,泛型方法等等…
五、List
- List是Collection的子接口
- List是
有序
集合: 有序是指集合迭代顺序和插入顺序一致- List集合允许
重复
元素!!- List集合提供了可以针对索引(下标)操作元素的方法
List接口中的方法大部分与父接口Collection中一致,
但是除此之外的方法,确实提了可以通过下标操作元素(CRUD)的方法
- void add(int index,E e) 按照下标位置加入元素 (增)(Create创建/新增)
- E remove(int index) 按照下标位置移除元素 (删)(Delete删除)
- E set(int index,E e) 按照下标位置设置(修改)元素 (改)(Update更新/修改)
- E get(int index) 按照下标位置获得元素 (查)(Read读取/查询)
List是接口,没有办法演示其中的方法
List接口有两个常用的实现类:
ArrayList
和LinkedList
5.1 ArrayList[重点]
ArrayList实现了List接口,即ArrayList也是
有序
集合,也允许重复
元素,且那些关于下标操作集合
的方法ArrayList都有!ArrayList不保证线程安全
ArrayList底层是数组
,大小可变是指它会扩容(不是真正大小可变)
5.1.1 演示方法
构造方法
ArrayList() 创建空集合,默认创建了一个长度为10的数组
- ArrayList(Collection c) 创建一个集合,集合内直接就有指定的参数
- ArrayList(int initialCapacity) 创建一个指定初始化容量的数组
ArrayList<Integer> list = new ArrayList<>( );
方法
- 其他的方法上午在Collection中已经学过
- void add(int index,E e)
- E remove(int index)
- E get(int index)
- E set(int index,E e)
public static void main(String[] args) {// 定义泛型// 空参构造,创建空集合(默认容量10)ArrayList<Integer> list = new ArrayList<>( );// 最基本的添加方法list.add(3);list.add(1);list.add(1);list.add(4);list.add(4);list.add(2);// 遍历(保证顺序-->有序)// 允许重复元素for (Integer i : list) {System.out.println(i );}// 其他常规方法不再演示// 主要掌握关于下标的方法// 311442// 按照下标插入 add(int i,E e)list.add(3,0);System.out.println(list );// 按照下标获得元素(取值) E get(int i)Integer e = list.get(4);System.out.println("下标4的值: " + e );// 按照下标修改值 E set(int i,E e)Integer old = list.set(4, 10);System.out.println("修改后的集合:" + list );System.out.println("返回的数据:" + old );// 按照下标删除 E remove(int i)Integer remove = list.remove(4);System.out.println("删除下标3的数据后:" + list );System.out.println("返回的数据:" + remove );}
5.1.2 底层原理[掌握|理解]
ArrayList
底层是使用数组
,默认长度是10
,但是存储元素多于10时会扩容.
如何扩容的?
- 当加入元素时,先判断加入后会不会超出默认长度
- 如果没有超出默认长度
- add(Object o) 元素直接放最后
- add(int index,Object o) 先将该位置以后的元素依次往后移动一个,然后再将该元素放入该位置
- 当加入元素时,判断
加入后长度会不会超出容量
,如果超出就要扩容- 扩容是
创建一个新的数组
,容量是原来的1.5倍
- 将原来数组的元素依次拷贝到新数组
- 然后再放入新元素
// jdk源码 private void grow(int minCapacity) {// int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);// 1.5倍if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity);}
/*
给定的代码是一个名为"grow"的方法,用于增加数组的容量。它接受一个参数"minCapacity",表示数组应该具有的最小容量。
以下是代码的逐步解释:
1. 方法首先使用"elementData"数组的"length"属性获取当前容量。
2. 然后通过将旧容量的一半加上旧容量本身来计算新容量。这是使用右移运算符(>>)实现的,它将值除以2。
3. 接下来,它检查新容量减去最小容量是否小于0。如果这个条件为真,说明新容量不足以满足所需的最小容量。在这种情况下,它将新容量设置为等于最小容量。
4. 然后,它检查新容量减去最大数组大小是否大于0。如果这个条件为真,说明新容量超过了数组允许的最大大小。在这种情况下,它调用"hugeCapacity"方法来计算一个在允许范围内的新容量。
5. 最后,它使用"Arrays.copyOf"方法创建一个具有更新容量的新数组。"elementData"数组被赋予新数组,从而增加了其容量。
总之,"grow"方法增加数组的容量以满足最小容量要求,并确保不超过允许的最大大小。
*/
5.1.3 特点[记住]
ArrayList特点: 1) 有序 2) 重复 3) 查询更新效率高 4) 删除插入效率低
应用场景: 适合那些查询频率高的地方. 且基本大部分场景都是经常查不经常删除和插入的,所以呢ArrayList就非常常用!!! 如果以后没有特殊说明,直接就使用ArrayList!!
相关文章:

day14_集合
今日内容 零、 复习昨日 一、集合框架体系 二、Collection 三、泛型 四、迭代 五、List(ArrayList、LinkedList) 零、 复习 throw和throws什么区别 throwthrows位置方法里面方法签名上怎么写throw 异常对象throws异常类名(多个)作用真正抛出异常对象声明抛出的异常类型 运行时…...

私有云:架构图
私有云:架构图 1、架构图2、服务器分配及配置3、本地物理机hosts文件配置4、相关软件包5、本地物理机电脑配置参考【内存最好20G往上】 机缘巧合之下突然想玩玩虚拟化,然后就查资料本地自己搭建一套私有云 使用【VMware Workstation】这个虚拟化软件来进…...

在安装和配置DVWA渗透测试环境遇到的报错问题
安装环境 前面的安装我参考的这个博主:渗透测试漏洞平台DVWA环境安装搭建及初级SQL注入-CSDN博客 修改bug 1.首先十分感谢提供帮助的博主,搭建DVWA Web渗透测试靶场_dvwa 白屏-CSDN博客,解决了我大多数问题,报错如下࿱…...

深度学习_2 数据操作
数据操作 机器学习包括的核心组件有: 可以用来学习的数据(data);如何转换数据的模型(model);一个目标函数(objective function),用来量化模型的有效性&…...

win 下安装 nvm 的使用与配置
nvm 全名 node.js version management,是一个 nodejs 的版本管理工具。通过它可以安装和切换不同版本的 nodejs。 注:如果已经安装了 nodejs 需先卸载后再安装 nvm 为了确保 nodejs 已彻底删除,可以看看安装目录中是否有 node 文件夹&#x…...

Git笔记
删除最后一次提交 git reset --hard HEAD~1...

省钱兄共享茶室共享娱乐室小程序都有哪些功能
随着共享经济的兴起,共享茶室和共享娱乐室作为一种新型的共享空间,逐渐受到了年轻人的青睐。省钱兄共享茶室共享娱乐室小程序作为该领域的优秀代表,集多种功能于一身,为用户提供了一个便捷、舒适、高效的社交娱乐平台。本文将详细…...

vue-cli方式创建vue3工程
创建工程前,可先用命令行查看是否安装vue-cli。 通过命令行查看vue-cli版本 vue --version 如果已安装vue-cli,则会显示当前安装版本 vue/cli 4.5.13 如果没有安装vue-cli,会提示安装 vue : 无法识别“vue”命令 需要通过npm全局安装v…...

四、W5100S/W5500+RP2040树莓派Pico<TCP Server数据回环测试>
文章目录 1. 前言2. 协议简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. TCP Server数据回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在计算机网络中,TCP Server是不可或缺的角色,它…...

技术视角下的跑腿小程序开发:关键挑战和解决方案
跑腿小程序作为连接服务提供者和用户的桥梁,面临着诸多技术挑战。本文将聚焦于技术层面的关键挑战,并提供解决方案,以帮助开发者应对技术上的复杂问题。 1. 实时性与性能挑战 挑战: 跑腿小程序需要实时地匹配订单、更新状态和提…...

Mysql进阶-索引篇(下)
SQL性能分析 SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次,通过sql语句的访问频次,我们可…...

从龙湖智创生活入选金钥匙联盟,透视物业服务力竞争风向
假设你是业主,物业“服务”和“管理”,哪个名词看起来更加亲切、讨喜? 站在个人角度,“服务”更让人感受到温度。但对于一个要长期运营下去的住宅或者商企项目来说,整体的管理又必不可少。前者面向人,后者…...

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(2)
参考视频:https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频4:CNN 中 stride 的概念 如上图,stride 其实就是 ”步伐“ 的概念。 默认情况下,滑动窗口一次移动一步。而当 stride …...

样式迁移 - Style Transfer
所谓风格迁移,其实就是提供一幅画(Reference style image),将任意一张照片转化成这个风格,并尽量保留原照的内容(Content)。 将样式图片中的样式迁移到内容图片上,得到合成图片。 基于CNN的样式迁移 奠基性工作: 首先…...

UE5.3启动C++项目报错崩溃
最近尝试用C来练习,碰到一个启动崩溃的事情 按照官方给的步骤做的:官方链接 结果是自定义的Character的问题,在自定义Character的构造函数里调用了: check(GEngine ! nullptr); GEngine->AddOnScreenDebugMessage(-1, 5, FCol…...

C/S架构和B/S架构
1. C/S架构和B/S架构简介 C/S 架构(Client/Server Architecture)和 B/S 架构(Browser/Server Architecture)是两种不同的软件架构模式,它们描述了客户端和服务器之间的关系以及数据交互的方式。 C/S 架构(…...

【AD9361 数字接口CMOS LVDSSPI】C 并行数据 LVDS
接上一部分,AD9361 数字接口CMOS &LVDS&SPI 目录 一、LVDS模式数据路径和时钟信号LVDS模式数据通路信号[1] DATA_CLK[2] FB_CLK[3] Rx_FRAME[4] Rx_D[5:0][5] Tx_FRAME[6]Tx_D[5:0][7] ENABLE[8] TXNRX系列 二、LVDS最大时钟速率和信…...

开关电源测试方案分享:电源纹波及噪声测试方法、测试标准
纹波及噪声影响着设备的性能和稳定性,是开关电源测试的重要环节。通过电源纹波噪声测试,检测电源纹波情况,从而提升开关电源的性能。纳米软件开关电源自动化测试软件助力纹波和噪声测试,提升测试效能。 开关电源纹波及噪声测试方法…...

git的使用——如何创建.gitignore文件,排除target、.idea文件夹的提交
前言 git作为开发人员必备的技能,需要熟练掌握,本篇博客记录一些git使用的场景,结合具体问题进行git使用的记录。以gitee的使用为例。 本篇博客介绍如何创建.gitignore文件,排除一些文件夹的提交,比如排除target、.i…...

react-antd组件 input输入框: 实现按回车搜索
目录 法1: 法2: 法1: 在Input组件上绑定onKeyUp方法 import { Input, message } from antd;class App extends React.Component{handeleSousuo () > {this.props.form.validateFields((error, values) > {if(!error){axios.post().t…...

python_PyQt5日周月K线纵向对齐显示_1_数据处理
目录 写在前面: 图形结果显示: 数据设计: 代码: 从日数据中计算周数据、月数据 生成图形显示需要的数据格式 写在前面: “PyQt5日周月K线纵向对齐显示”,将分三篇博文描述 1 数据处理。将数据处理成…...

leetcode经典面试150题---4.删除有序数组中的重复项II
目录 题目描述 前置知识 代码 方法一 双指针 思路 图解 实现 复杂度 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间&…...

Transformer英语-法语机器翻译实例
依照Transformer结构来实例化编码器-解码器模型。在这里,指定Transformer编码器和解码器都是2层,都使用4头注意力。为了进行序列到序列的学习,我们在英语-法语机器翻译数据集上训练Transformer模型,如图11.2所示。 da…...

21.12 Python 实现网站服务器
Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端ÿ…...

Leetcode.274 H 指数
题目链接 Leetcode.274 H 指数 mid 题目描述 给你一个整数数组 c i t a t i o n s citations citations ,其中 c i t a t i o n s [ i ] citations[i] citations[i] 表示研究者的第 i i i 篇论文被引用的次数。计算并返回该研究者的 h h h 指数。 根据维基百科…...

订单BOM放哪儿?(我的APS项目二)
供应商的小伙伴带来了一个全新的架构,在服务器提供的服务中,有一个对象模型服务,就是数据内存对象;这个方式确实是我在其它架构中没有见到过的。可惜,最初的版本,我们的订单BOM被设计到放在内存对象中。我对…...

从0到1之微信小程序快速入门(03)
目录 什么是生命周期函数 WXS脚本 编辑 与 JavaScript 不同 纯数据字段 组件生命周期 定义生命周期方法 代码示例 组件所在页面的生命周期 代码示例 插槽 什么是插槽 启用多插槽 编辑 定义多插槽 组件通信 组件间通信 监听事件 触发事件 获取组件实例 自…...

【面试高高手】—— docker面试题
文章目录 1. 什么是Docker?它有什么作用?2.Docker容器和虚拟机之间有什么区别?3.如何创建一个Docker容器?4.Docker镜像和容器的区别是什么?5.什么是Dockerfile?能够详细说明下吗?6.什么是Docker Compose&a…...

mac电脑怎么永久性彻底删除文件?
Mac老用户都知道在我们查看Mac内存时都会发现有一条“其他文件”占比非常高,它是Mac储存空间中的“其他”数据包含不可移除的移动资源,如,Siri 语音、字体、词典、钥匙串和 CloudKit 数据库、系统无法删除缓存的文件等。这些“其他文件”无用…...

MySQL(2):环境搭建
1.软件下载 软装去官网下载(社区版):https://downloads.mysql.com/archives/installer/(历史版本可选) 选择下面的,一步到位 2.软件安装 双击 .msi 文件 选完 Custom 自定义后点 next 按 1,…...