顺序表(ArrayList)
1、简介
2、顺序表的实现
下面是顺序表的一些基本成员和方法,能够让大家更好的认识和了解顺序表:
1、组成成员和构造方法
private int[] elem;//用来存放数据元素private int usedSized;//用来计算有效数据元素的个数public final static int DEFUALT_SIZE = 10;//无参构造方法,初始化默认长度的顺序表public MyArrayList() {this.elem = new int[DEFUALT_SIZE];}// 将顺序表的底层容量设置为initcapacitypublic MyArrayList(int initcapacity ) {this.elem = new int[initcapacity];} 2、新增元素(默认在数组最后新增)
//新增元素 默认在最后添加public boolean isFull(){if(this.elem.length==this.usedSized){return true;}return false;}public void add(int data) {//如果满了,则要进行扩容if(isFull()){//扩容this.elem = Arrays.copyOf(this.elem,2*this.elem.length);}this.elem[this.usedSized] = data;this.usedSized++;}
3、在pos位置新增元素
//在pos位置新增元素public void add(int pos, int data) {if(pos < 0||pos > usedSized){throw new PosOutOfBoundsException(pos+"下标位置不合法");}//如果满了,则要进行扩容if(isFull()){//扩容this.elem = Arrays.copyOf(this.elem,2*this.elem.length);}for (int i = this.usedSized - 1; i >= pos ; i--) {//这里pos位置的数据也需要往后挪this.elem[i+1] = this.elem[i];}this.elem[pos] = data;this.usedSized++;}
自定义异常的代码 :
public class PosOutOfBoundsException extends RuntimeException {public PosOutOfBoundsException(String message) {super(message);}
}
4、判定是否包含某个元素
//判定是否包含某个元素
public boolean contains(int toFind) {for (int i = 0; i < this.usedSized; i++) {if(this.elem[i] == toFind){return true;}}return false;}
5、查找某个元素对应的位置
//查找某个元素对应的位置
public int indexOf(int toFind) {for (int i = 0; i < this.usedSized; i++) {if(this.elem[i] == toFind){return i;}}return -1;}
6、获取pos位置的元素
//判断pos位置是否合法private void checkPos(int pos){if(pos < 0 ||pos >= this.usedSized){throw new PosOutOfBoundsException(pos+"下标位置不合法");}}
//获取pos位置的元素
public int get(int pos) {checkPos(pos);return this.elem[pos];}
7、给 pos 位置的元素设为 value(更新)
//给 pos 位置的元素设为 value(更新)
public void set(int pos, int value) {checkPos(pos);this.elem[pos] = value;}
8、删除第一次出现的关键字key
//删除第一次出现的关键字keypublic void remove(int toRemove) {//获取被删除元素的下标int index = indexOf(toRemove);if(index == -1){System.out.println("没有这个数据");return;}for (int i = index; i < this.usedSized - 1; i++) {this.elem[i] = this.elem[i+1];}//引用类型//elem[usedSized-1] = null;this.usedSized--;}
9、获取顺序表长度
// 获取顺序表长度public int size() {return this.usedSized;}
10、打印顺序表
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的//实际上是遍历数组public void display() {for (int i = 0; i < this.usedSized; i++) {System.out.print(this.elem[i] + " ");}
3、顺序表的使用
1、创建顺序表
//创建了一个存放整数类型的顺序表并初始化了15个空间
ArrayList<Integer> list = new ArrayList<>(15);
ArrayList<Integer> list3 = new ArrayList<>();list3.add(10);//在第一次add分配大小为10的内存空间,扩容按照1.5倍的方式进行扩容,扩容的最大容量是int的最大值
2、顺序表中的常用方法
ArrayList<Integer> list3 = new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);list3.remove(2);//删除的是下标list3.remove(new Integer(2));//删除的是元素,且只删除第一个等于2的元素System.out.println(list3.get(0));//获取0下标的值list3.set(0,99);//修改0下标的值为99System.out.println(list3);list3.clear();//清空顺序表
3、截取顺序表及注意事项
顺序表的截取后的对象指向的是原引用,也就是说能够通过两个对象(截取前、截取后)都能对引用中的值进行修改。
理解了上述内容后,大家可以想想看下面代码的输出结果:
ArrayList<Integer> list3 = new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);List<Integer> list = list3.subList(0,2);//[0,2)//在原List上截取,也就是说指向的是原List的引用,因此修改List的值同时也会修改List3的值list.set(0,188);System.out.println(list);//一般能够直接sout输出内容时,说明里面一定重写了toString方法System.out.println(list3);
代码输出结果:[188,2]
[188,2,3]
4、Arraylist的遍历
1、
for (int i = 0; i < list3.size(); i++) {System.out.print(list3.get(i) +" ");}
2、
for (Integer x:list3){System.out.print(x + " ");}
以上两种方法与之前讲过的数组遍历大同小异,这里就不做过多赘述,下面是使用迭代器进行Arraylist的遍历。
3、
Iterator<Integer> iterator = list3.iterator();while (iterator.hasNext()){System.out.print(iterator.next() + " ");}
4、
ListIterator listIterator = list3.listIterator();while (listIterator.hasNext()){System.out.print(listIterator.next() + " ");}
考虑到大家记忆困难,循环内的内容可以与之前提到的循环输入类比记忆,大家只需创建迭代器对象的过程即可。
5、从后往前遍历
ListIterator listIterator2 = list3.listIterator(list3.size());while (listIterator2.hasPrevious()){System.out.print(listIterator2.previous() + " ");}System.out.println();
相关文章:
顺序表(ArrayList)
1、简介 顺序表是用一段物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下 采用数组存储 。在 数组 上完成数据的增删查改。( 顺序表的底层结构是一个数组 ) 2、顺序表的实现 下面是顺序表的一些基本成员和方法,能够…...
【Hadoop】Hadoop的HDFS
这里写目录标题 HDFS概述HDFS产出背景及定义HDFS产生背景HDFS定义 HDFS优缺点HDFS优点HDFS缺点 HDFS组成架构HDFS文件块大小 HDFS的Shell操作常用命令实操准备工作上传下载HDFS直接操作 HDFS的API操作客户端环境准备HDFS的API案例实操HDFS文件上传HDFS文件下载HDFS文件更名和移…...
C++ Primer 迭代器
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
使用 Postman 进行 API 测试:从入门到精通
使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…...
Leetcode面试高频题分类刷题总结
https://zhuanlan.zhihu.com/p/349940945 以下8个门类是面试中最常考的算法与数据结构知识点。 排序类(Sort): 基础知识:快速排序(Quick Sort), 归并排序(Merge Sort)的…...
8.原型模式(Prototype)
动机 在软件系统中,经常面临着某些结构复杂的对象的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 之前的工厂方法和抽象工厂将抽象基类和具体的实现分开。原型模式也差不多&#…...
简单介绍一下什么是OpenFeign
OpenFeign是什么? OpenFeign是一个声明式的Http客户端,它可以用来发起Http请求 它主要用于SpringCloud微服务之间的通讯,让调用另一个服务的Java方法和调用本地方法一样快速和便捷 之前我们是用RestTemplate写一大堆东西发起Http请求远程调…...
力扣动态规划-20【算法学习day.114】
前言 ###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!! 习题 1.网格中的最小路径代价 题目链接…...
Codeforces Round 1002 (Div. 2)(部分题解)
补题链接 A. Milya and Two Arrays 思路:题意还是比较好理解,分析的话我加了一点猜的成分,对a,b数组的种类和相加小于4就不行,蒋老师的乘完后小于等于2也合理。 AC代码: #include <bits/stdc.h> u…...
在线销售数据集分析:基于Python的RFM数据分析方法实操训练
一、前言 个人练习,文章用于记录自己的学习练习过程,分享出来和大家一起学习。 数据集:在线销售数据集 分析方法:RFM分析方法 二、过程 1.1 库的导入与一些必要的初始设置 import pandas as pd import datetime import matplo…...
小程序设计和开发:要如何明确目标和探索用户需求?
一、明确小程序的目标 确定业务目标 首先,需要明确小程序所服务的业务领域和目标。例如,是一个电商小程序,旨在促进商品销售;还是一个服务预约小程序,方便用户预订各类服务。明确业务目标有助于确定小程序的核心功能和…...
【C语言深入探索】:指针高级应用与极致技巧(二)
目录 一、指针与数组 1.1. 数组指针 1.2. 指向多维数组的指针 1.2.1. 指向多维数组元素的指针 1.2.2. 指向多维数组行的指针 1.3. 动态分配多维数组 1.4. 小结 二、指针与字符串 2.1. 字符串表示 2.2. 字符串处理函数 2.3. 代码示例 2.4. 注意事项 三、指针与文件…...
2.策略模式(Strategy)
定义 定义一系列算法,把它们一个个封装起来,并且使他们可互相替换(变化)。该模式使算法可独立于使用它的客户程序(稳定)而变化(拓展,子类化)。 动机(Motiva…...
手写MVVM框架-构建虚拟dom树
MVVM的核心之一就是虚拟dom树,我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称(英文大写)ele, // 对应真实节点children,…...
【Blazor学习笔记】.NET Blazor学习笔记
我是大标题 我学习Blazor的顺序是基于Blazor University,然后实际内容不完全基于它,因为它的例子还是基于.NET Core 3.1做的,距离现在很遥远了。 截至本文撰写的时间,2025年,最新的.NET是.NET9了都,可能1…...
C++11中的bind
官方文档对于bind接口的概述解释:Bind function arguments 在C11中,std::bind 是一个非常有用的工具,用于将函数、成员函数或函数对象与特定的参数绑定在一起,生成一个新的可调用对象。std::bind 可以用于部分应用函数参数、改变…...
llama.cpp的C语言API使用
我们知道,一般运行大语言模型都是在Python上运行的,可是Python的性能太差了,不适合用于生产环境,因此可以采用llama.cpp提供的API在C语言上运行大模型。 llama.cpp的下载 Windows下的下载 我们需要下载llama.cpp的两个部分&…...
鼠标拖尾特效
文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果,能够为网页增添独特的视觉体验。它通常通过JavaScript和C…...
基于 docker 的mysql 5.7 主备集群搭建
创建挂载目录和配置文件 主节点 mkdir -p /mysql_master/mysql/log mkdir -p /mysql_master/mysql/data mkdir -p /mysql_master/mysql/conf vim /mysql_master/mysql/conf/my.cnf[mysqld] datadir/var/lib/mysql #MySQL 数据库文件存放路径 server_id 1 #指定数据库服务器的…...
金山打字游戏2010绿色版,Win7-11可用DxWnd完美运行
金山打字游戏2010绿色版,Win7-11可用DxWnd完美运行 链接:https://pan.xunlei.com/s/VOIAYCzmkbDfdASGJa_uLjquA1?pwd67vw# 进入游戏后,如果输入不了英文字母(很可能是中文输入状态),就按一下“Shift”键…...
爬虫学习笔记之Robots协议相关整理
定义 Robots协议也称作爬虫协议、机器人协议,全名为网络爬虫排除标准,用来告诉爬虫和搜索引擎哪些页面可以爬取、哪些不可以。它通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下。 robots.txt文件的样例 对有所爬虫均生效&#…...
(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例
(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…...
【玩转 Postman 接口测试与开发2_016】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(上)
《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证1 契约测试的概念2 契约测试的工作原理3 契约测试的分类4 DeepSeek 给出的契约测试相关背景5 契约测试在 Postman 中的创建方法6 API 实例的基本用法7 API 实例的类型实…...
25.02.04 《CLR via C#》 笔记14
第二十一章 托管堆和垃圾回收 内存分配过程 CLR维护一个“下一次分配指针”(NextObjPtr),指向当前托管堆中第一个可用的内存地址 计算类型所需的字节数,加上对象开销(类型对象指针、同步块索引)所需字节数…...
day8-面向对象
目录 面向对象1、面向对象介绍2、类和对象类和对象类的几个补充注意事项 3、封装 面向对象 1、面向对象介绍 ⭐️面向对象介绍: 面向:拿、找对象:能干活的东西面向对象编程:拿东西过来做对应的事情 面向对象编程的例子&#x…...
Pyside6 的QObject 类
PySide6 中的 QObject 是 Qt 框架的核心基类,所有需要信号与槽、事件处理、内存管理的对象均需要继承自它。以下是关于 QObject 的详细说明,从功能、关键特性到实际代码示例进行阐述: 1. 核心功能 QObject 提供了以下基本能力: …...
【Java】位图 布隆过滤器
位图 初识位图 位图, 实际上就是将二进制位作为哈希表的一个个哈希桶的数据结构, 由于二进制位只能表示 0 和 1, 因此通常用于表示数据是否存在. 如下图所示, 这个位图就用于标识 0 ~ 14 中有什么数字存在 可以看到, 我们这里相当于是把下标作为了 key-value 的一员. 但是这…...
基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要
前言:项目题材来自数学建模2024年的D题,文章内容为笔者和队友原创,提供一个思路。 摘要 随着现代军事技术的发展,深水炸弹在特定场景下的反潜作战效能日益凸显,如何最大化的发挥深弹威力也成为重要研究课题。本文针对评估深弹投掷落点对命中潜艇概率的影响进行分析,综合利…...
【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用
文章目录 介绍GloVe 介绍核心思想共现矩阵1. 共现矩阵的定义2. 共现概率矩阵的定义3. 共现概率矩阵的意义4. 共现概率矩阵的构建步骤5. 共现概率矩阵的应用6. 示例7. 优缺点优点缺点 **总结** 目标函数训练过程使用预训练的GloVe词向量 优点应用总结 个人主页:道友老…...
红黑树的封装
一、封装思路 在 STL 中 map set 的底层就是封装了一棵红黑树。 其中连接红黑树和容器的是迭代器,map set 暴露出的接口都不是自己写的,而是红黑树写的,外部接口封装红黑树接口。 所以写出红黑树为 map set 写的接口,再在上层的…...
