当前位置: 首页 > news >正文

顺序表ArrayList

在这里插入图片描述

作者简介: zoro-1,目前大二,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

顺序表

  • 概念
  • Arraylist
    • 构造方法
    • 相关方法
    • 遍历操作
  • 自定义Arraylist
    • 接口
    • 实现类

概念

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

Arraylist

构造方法

ArrayList是Java编程语言中的一个类,用于实现可动态调整大小的数组。ArrayList提供了多种构造方法,可以根据需要选择不同的构造方法。

以下是常用的ArrayList构造方法:

  1. ArrayList():创建一个空的ArrayList,初始容量为10。

  2. ArrayList(int initialCapacity):创建一个指定初始容量的ArrayList。

  3. ArrayList(Collection<? extends E> c):创建一个包含指定元素的ArrayList。该ArrayList根据指定集合的迭代器顺序包含集合的所有元素。

示例:

//创建一个空的ArrayList
ArrayList<String> list1 = new ArrayList<String>();//创建一个指定初始容量的ArrayList
ArrayList<Integer> list2 = new ArrayList<Integer>(20);//创建一个包含指定元素的ArrayList
ArrayList<String> list3 = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange"));

注意:ArrayList是泛型类,可以指定任意类型作为其元素类型。以上示例中,list1和list2元素类型为String和Integer,list3元素类型为String。

相关方法

ArrayList 是 Java 中常用的一种集合类型,具有动态的添加元素、随机访问、删除元素等基本功能,具体方法如下:

  1. add(E e):在 List 的末尾添加一个元素。
  2. add(int index, E element):在指定的索引位置插入一个元素。
  3. remove(int index):根据索引删除一个元素。
  4. remove(Object o):删除第一个包含指定元素的元素。
  5. clear():清空 List 中的所有元素。
  6. get(int index):返回指定索引位置的元素。
  7. set(int index, E element):用指定元素替换指定位置的元素。
  8. isEmpty():如果 List 不包含任何元素,则返回 true。
  9. size():返回 List 中元素的个数。
  10. contains(Object o):如果 List 包含指定的元素,则返回 true。
  11. indexOf(Object o):返回第一个匹配元素的索引位置,如果没有找到则返回 -1。
  12. subList(int fromIndex, int toIndex):返回 List 中从 fromIndex 开始到 toIndex - 1 结束(不包括 toIndex 位置)的一个子列表。

除此之外,ArrayList 还实现了 Iterable、Collection 和 List 接口,因此可以使用这些接口中定义的方法。例如,可以使用 Collections 类的 sort(List list) 方法对 ArrayList 中的元素进行排序。ArrayList 是 Java 中常用的一种集合类型,具有动态的添加元素、随机访问、删除元素等基本功能,具体方法如下:

遍历操作

  1. 增强for循环遍历
ArrayList<String> list = new ArrayList<>();
// 添加元素
for(String element : list){System.out.println(element); // 输出元素
}
  1. 迭代器遍历
ArrayList<String> list = new ArrayList<>();
// 添加元素
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){String element = iterator.next();System.out.println(element); // 输出元素
}
  1. lambda表达式遍历(Java 8及以后版本)
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.forEach(element -> System.out.println(element)); // 输出元素
```1. 增强for循环遍历
```java
ArrayList<String> list = new ArrayList<>();
// 添加元素
for(String element : list){System.out.println(element); // 输出元素
}
  1. 迭代器遍历
ArrayList<String> list = new ArrayList<>();
// 添加元素
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){String element = iterator.next();System.out.println(element); // 输出元素
}
  1. lambda表达式遍历(Java 8及以后版本)
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.forEach(element -> System.out.println(element)); // 输出元素

自定义Arraylist

接口

public interface IList {//新增元素,默认在数组最后新增public void add(int data);// 在 pos 位置新增元素public void add(int pos, int data);// 判定是否包含某个元素public boolean contains(int toFind) ;// 查找某个元素对应的位置public int indexOf(int toFind);// 获取 pos 位置的元素public int get(int pos);// 给 pos 位置的元素设为 value  更新public void set(int pos, int value);//删除第一次出现的关键字keypublic void remove(int toRemove) ;// 获取顺序表长度public int size();// 清空顺序表public void clear() ;// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的public void display();boolean isFull();

实现类

import java.util.Arrays;/*** @Author 12629* @Description:*/
public class MyArrayList implements IList {public int[] elem ;public int usedSize;//0//顺序表的 默认大小public static final int DEFAULT_SIZE = 10;public MyArrayList() {this.elem = new int[DEFAULT_SIZE];}public MyArrayList(int capacity) {this.elem = new int[capacity];}/*** 遍历顺序表当中的元素*/@Overridepublic void display() {for (int i = 0; i < this.usedSize; i++) {System.out.print(this.elem[i]+" ");}System.out.println();}@Overridepublic void add(int data) {checkCapacity();this.elem[this.usedSize] = data;this.usedSize++;}@Overridepublic boolean isFull() {/*if(usedSize == elem.length) {return true;}return false;*/return usedSize == elem.length;}@Overridepublic void add(int pos, int data) {try {checkPosOnAdd(pos);}catch (PosIllegality e) {e.printStackTrace();return;}checkCapacity();//1、从最后一个有效的数据开始往后移动 //2、当i < pos 就结束for (int i = usedSize-1; i >= pos; i--) {elem[i+1] = elem[i];}//3、存放元素到pos 位置elem[pos] = data;//4、usedSize++;usedSize++;}/*** 检查pos的合法性*/private void checkPosOnAdd(int pos) throws PosIllegality{if(pos < 0 || pos > usedSize) {System.out.println("不符合法!");throw new PosIllegality("插入元素下标异常: "+pos);}}private void checkCapacity() {if(isFull()) {//扩容elem = Arrays.copyOf(elem,elem.length*2);}}@Overridepublic boolean contains(int toFind) {if(isEmpty()) {return false;}for (int i = 0; i < usedSize; i++) {//如果是查找引用数据类型 一定记住 重写方法if(elem[i] == toFind) {return true;}}return false;}public boolean isEmpty() {return usedSize == 0;}@Overridepublic int indexOf(int toFind) {if(isEmpty()) {return -1;}for (int i = 0; i < usedSize; i++) {//如果是查找引用数据类型 一定记住 重写方法if(elem[i] == toFind) {return i;}}return -1;}@Overridepublic int get(int pos) throws MyArrayListEmpty{checkPosOnGetAndSet(pos);if(isEmpty()) {throw new MyArrayListEmpty("获取指定下标元素时" +"顺序表为空!");}return elem[pos];}private void checkPosOnGetAndSet(int pos) throws PosIllegality{if(pos < 0 || pos >= usedSize) {System.out.println("不符合法!");throw new PosIllegality("获取指定下标的元素异常: "+pos);}}@Overridepublic void set(int pos, int value) {checkPosOnGetAndSet(pos);elem[pos] = value;}@Overridepublic void remove(int toRemove) {int index = indexOf(toRemove);if(index == -1) {System.out.println("没有这个数字!");return;}for(int i = index; i < usedSize-1;i++) {elem[i] = elem[i+1];}usedSize--;}@Overridepublic int size() {return this.usedSize;}@Overridepublic void clear() {this.usedSize = 0;}
}

今天的分享到这就结束了,记得三连哦,谢谢大家支持
在这里插入图片描述

相关文章:

顺序表ArrayList

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 顺序表 概念Arraylist构造方法相关方法遍历操作 自…...

python软件安装技巧

安装软件时候加上源地址去安装&#xff0c;快速稳 pip install openni -ihttps://pypi.tuna.tsinghua.edu.cn/simple...

解析Apache Kafka中的事务机制

这篇博客文章并不是关于使用事务细节的教程&#xff0c;我们也不会深入讨论设计细节。相反&#xff0c;我们将在适当的地方链接到JavaDocs或设计文档&#xff0c;以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…...

Vue虚拟节点和渲染函数

1.虚拟节点 虚拟节点&#xff08;dom&#xff09;本质上就是一个普通的JS对象&#xff0c;用于描述视图的界面结构 2.渲染函数render()&#xff1a;接收一个 createElement()函数创建的VNode Vue.component("board", {render: function(createElement) {return cr…...

后台交互-首页->与后台数据进行交互,wsx的使用

与后台数据进行交互wsx的使用 1.与后台数据进行交互 // index.js // 获取应用实例 const app getApp() const apirequire("../../config/app.js") const utilrequire("../../utils/util.js") Page({data: {imgSrcs:[{"img": "https://cd…...

【微服务保护】Sentinel 流控规则 —— 深入探索 Sentinel 的流控模式、流控效果以及对热点参数进行限流

文章目录 前言一、快速掌握 Sentinel 的使用1.1 什么是簇点链路1.2 Sentinel 的简单使用示例 二、Sentinel 流控模式2.1 直接模式2.2 关联模式2.3 链路模式 三、流控效果3.1 快速失败3.2 预热模式3.3 排队等待 四、对热点参数的流控4.1 热点规则4.2 热点规则演示 前言 微服务架…...

ZXing.Net 的Core平台生成二维码

一、引用 二、代码 帮助类 /// <summary>/// ZXing.NET 二维码帮助类/// </summary>public class ZXingHelper{/// <summary>/// 站点二维码的目录/// </summary>private static string QRCodeDirectory "QRCode";/// <summary>/// 使…...

【C++】假设给类分配的是栈的空间,那么计算机是如何访问栈中不同位置的对象的数据的呢?

2023年10月22日&#xff0c;周日上午 当在栈上创建一个对象时&#xff0c;计算机会为该对象分配一块连续的内存空间。该内存空间的位置在栈帧中&#xff0c;栈帧是用来存储函数调用信息和局部变量的一块内存区域。 栈帧中包含一个指针&#xff0c;称为栈指针&#xff08;stack…...

iOS使用CoreML运用小型深度神经网络架构对图像进行解析

查找一个图片选择器 我用的是ImagePicker 项目有点老了&#xff0c;需要做一些改造&#xff0c;下面是新的仓库 platform :ios, 16.0use_frameworks!target learnings dosource https://github.com/CocoaPods/Specs.gitpod ImagePicker, :git > https://github.com/KevinS…...

使用Python打造微信高效自动化操作教程

引言 在如今数字化时代&#xff0c;人们对于效率的追求越来越强烈&#xff0c;尤其是在工作和学习中。自动化操作成为了提高生产力的有效途径之一&#xff0c;而PyAutoGUI和Pyperclip作为Python中的两个强大库&#xff0c;为我们实现自动化操作提供了便利。本文将向大家介绍如…...

怎么在爬虫中使用ip代理服务器,爬虫代理IP的好处有哪些?

随着互联网的快速发展&#xff0c;网络爬虫已经成为数据采集、分析和整理的重要工具。然而&#xff0c;随着网络技术的不断发展&#xff0c;许多网站都会采取反爬虫措施&#xff0c;以避免数据被恶意获取。在这种情况下&#xff0c;代理IP服务器就成为了爬虫们的必本备文工将具…...

Typora的相关配置(Typora主题、字体、快捷键、习惯)

Typora的相关配置(Typora主题、字体、快捷键、习惯) 文章目录 Typora的相关配置(Typora主题、字体、快捷键、习惯)[toc]一、主题配置二、字体配置查看字体名称是否可以被识别&#xff1a;如果未能正确识别&#xff1a; 三、习惯配置四、快捷键配置更改提供的功能的快捷键&#…...

守护进程深度分析

思考 代码中创建的会话&#xff0c;如何关联控制终端&#xff1f; 新会话关联控制终端的方法 会话首进程成功打开终端设备 (设备打开前处于空闲状态) 1、关闭标准输入输出和标准错误输出2、将 stdin 关联到终端设备&#xff1a;STDIN_FILENO > 03、将 stdout 关联到终端设…...

SpringAMQP

SpringAMQT RabbitMQ安装与部署RabbitMQ结构简单队列模型 SpringAMQP依赖引入配置RabbitMQ连接信息基本模型简单队列模型WorkQueue模型 发布订阅模型FanoutExchangeDirectExchangeTopicExchange 消息转换器 消息队列是实现异步通讯的一种方式&#xff0c;我们将从RabbitMQ为例开…...

深入探索Sharding JDBC:分库分表的利器

随着互联网应用的不断发展和用户量的不断增加&#xff0c;传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题&#xff0c;分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…...

Java后端模拟面试 题集④

1.你先作个自我介绍吧 面试官您好&#xff0c;我叫张睿超&#xff0c;来自湖南长沙&#xff0c;大学毕业于湖南农业大学&#xff0c;是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图…...

中国5G产业全景图谱报告2022_挚物AIoT产业研究院

中国5G产业全景图谱报告2022_挚物AIoT产业研究院 产业结构 5G 产业结构主要包括接入网、传输网、核心网、电信运营商、网络配套服务商、5G 应用生态及产业服务 7 个主要板块。根据各版块中主要市场参与者提供的产品和服务&#xff0c;又下分子版块。 &#xff08;1&#xff…...

设计链表复习

设计链表 class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode next) {this.val val;this.next next;}}class MyLinkedList {//size存储链表元素的个数int size;//虚拟头节点ListNode…...

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下&#xff1a; 打开 Visual Studio Code。 在顶部菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09; > "Preferences"&#xff08;首选项&#xff09; > "Settings…...

2023年拼多多双11百亿补贴新增单件立减玩法介绍

2023年拼多多双11百亿补贴新增单件立减玩法介绍 拼多多启动了11.11大促活动&#xff0c;主题为“天天11.11&#xff0c;天天真低价”。消费者享受多重优惠&#xff0c;包括满减、百亿补贴和单件立减等。百亿补贴新增玩法&#xff0c;有超过20000款品牌商品参与单件立减活动。 …...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...