发布时间:2026/7/14 4:50:17
从零手写顺序表到深入理解ArrayList:Java数据结构核心实践指南 顺序表理解顺序表在物理内存结构是连续的 通常用数组 完成增删查改 我们需要删除和修改的时候 必须要遍历整个数组 效率不高 于是引出来链表顺序表的模拟package Book3;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class nn{private int[] array;//数组private int size;//数组个数private int a10;// 默认构造方法nn(){// 将顺序表的底层容量设置为initcapacity//数组初始化this.size0;this.arraynew int[a];}//扩容数组private void k(){array Arrays.copyOf(this.array,2*this.array.length);}//判断是否满// 新增元素,默认在数组最后新增public void add(int data) {//先判断是否满 如果没有满则直接写入if(this.size1array.length){k();}array[this.size]data;this.size;}private void zuobiao(int pos) throws zuobiao{if(pos0||possize){System.out.println(坐标插入不合法,请输入0到size的数);throw new zuobiao(坐标位置不合法);}}//在 pos 位置新增元素public void add(int pos, int data) {//先检查拆入的坐标合法性zuobiao(pos);this.array[pos]data;this.size;}// 判定是否包含某个元素public boolean contains(int toFind) {for (int i 0; i this.size; i) {if (array[i]toFind){System.out.println(找到了);return true;}}return false;}// 查找某个元素对应的位置public int indexOf(int toFind) {for (int i 0; i this.size; i) {if (array[i]toFind){System.out.println(对应的坐标 i);return i;}}return -1; }// 获取 pos 位置的元素public int get(int pos) {//先判断输入的坐标的合法性zuobiao(pos);return array[pos];}// 给 pos 位置的元素设为 valuepublic void set(int pos, int value) {zuobiao(pos);this.array[pos]value;}//删除第一次出现的关键字keypublic void remove(int toRemove) {int b0;for (int i 0; i this.size; i) {if(array[i]toRemove){bi;break;}}for (int i b; i size-1; i) {array[i]array[i1];}this.size--;}//获取顺序表长度public int size() { return array.length; }// 清空顺序表public void clear() {this.size0;}// 打印顺序表注意该方法并不是顺序表中的方法为了方便看测试结果给出的public void display() {//判断数组是否为空if(this.size0){System.out.println(数组为空);return;}for (int i0;ithis.size;i){System.out.println(this.array[i]);}}//int indexOf(Object o) 返回第一个 o 所在下标public int frinstindexof1(int o){for (int i 0; i this.size; i) {if(array[i]o){System.out.println(找到了o下标为i);return i;}}return 0;}//int lastIndexOf(Object o) 返回最后一个 o 所在下标public int lastIndexof(int a){for (int isize; i 0 ; i--) {if (aarray[i]){System.out.println(找到了下标为i);return i;}}return 0;}// ListE subList(int fromIndex, int toIndex) 截取部分 list//左闭右开public List subList(int qishi,int jieshu){zuobiao(qishi);zuobiao(jieshu);List anew ArrayList();for (int i qishi; i jieshu-qishi ; i) {a.add(array[i]);}return a;}}class mm{public static void main(String[] args) {nn nnew nn();n.add(1);n.add(1);n.add(2);n.add(2);n.add(3);n.lastIndexof(2);System.out.println(n.subList(1, 3));}}ArraryListArrayListInteger anew ArrayList(); //无参构造 a.add(1); a.add(2); a.add(3); a.add(4); //有参构造 ArrayListInteger bnew ArrayList(a); System.out.println(b); //初始化数组容量 ArrayListInteger cnew ArrayList(20); System.out.println(c);1. ArrayList是以泛型方式实现的使用时必须要先实例化2. ArrayList实现了RandomAccess接口表明ArrayList支持随机访问3. ArrayList实现了Cloneable接口表明ArrayList是可以clone的4. ArrayList实现了Serializable接口表明ArrayList是支持序列化的5.和Vector不同ArrayList不是线程安全的在单线程下可以使用在多线程中可以选择Vector或者CopyOnWriteArrayList6. ArrayList底层是一段连续的空间并且可以动态扩容是一个动态类型的顺序表ArryaryList使用ArrayList cnew ArrayListInteger(); c.add(1); System.out.println(c);顺序表add运行底层 扩容机制顺序表中的数组是怎么给定容量 在什么时候给定容量的第一次进行分配空间是10如果数组存满的话则返回的个数1 11数组容量变为10如果不够以1.5倍扩容如果在不够 以用户实际为标准扩容//三种遍历顺序表的方式//for循环for (int i 0; i c.size(); i) {System.out.println(c.get(i));}//earhfor (Integer integer:c){System.out.println(integer);}//迭代器IteratorInteger f c.listIterator();//向前向后遍历的迭代器 接收while (f.hasNext()){//hasnext判断后面是否有元素System.out.println(f.next());//next指向下一个元素顺序表的优缺点分析优点支持快速随机访问、无需额外存储指针、缓存命中率高。缺点插入删除效率低、扩容成本高、需预分配空间可能导致浪费。

相关新闻

2026/7/14 4:45:17

滑动窗口算法实战:无重复字符最长子串详解与多语言实现

算法实战:无重复字符的最长子串详解在面试和算法竞赛中,"无重复字符的最长子串"是一个经典且高频出现的题目。很多开发者在初次接触时容易陷入暴力求解的思维定式,导致时间复杂度居高不下。本文将系统讲解滑动窗口算法的核心思想&a…

2026/7/14 7:00:24

直流负载管理优化:G6D-ASI继电器与MKV44F256VLH16控制方案

1. 直流负载管理的核心挑战与优化方向在工业自动化和电力电子系统中,直流负载管理一直是个棘手的技术难题。传统继电器控制方案存在三大致命缺陷:触点磨损导致的接触电阻增加、电弧效应造成的能量损耗、以及机械结构带来的响应延迟。以一个典型的24V/10A…

2026/7/14 7:00:24

【iOS】虚拟内存 物理内存

虚拟内存 & 物理内存 早期的数据访问是直接通过物理地址访问的,容易出现内存不够用、内存数据的安全问题。 为了解决内存不够用的问题,我们在进程和物理内存之间增加了一个中间层,即虚拟内存,主要用于解决当多个进程同时存在时…

2026/7/14 7:00:24

STM32驱动压电蜂鸣器实现高音量报警系统设计

1. 项目背景与核心需求在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质单薄、环境适应性差等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合STM32F334R8微控制器的解决方案,…

2026/7/14 7:00:24

跨平台引流实战:从浏览器到应用商店的智能跳转方案解析

1. 跨平台引流的技术挑战与解决方案当用户通过社交媒体或网页分享链接访问推广页面时,如何精准引导用户下载或打开App?这个问题看似简单,实则涉及复杂的设备识别和跳转逻辑。不同操作系统、不同品牌设备、不同浏览器环境,都需要针…

2026/7/13 6:38:38

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/13 14:26:14

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/13 18:07:53

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/14 0:04:21

5分钟掌握足球PBR材质制作:Photoshop与Unity高效工作流

1. 项目概述:为什么是足球PBR材质?在游戏开发,尤其是体育竞技类游戏的制作中,一个看起来“对味”的足球,往往比我们想象中更重要。它不仅是赛场上的核心道具,更是玩家视觉焦点和沉浸感的重要来源。一个塑料…

2026/7/14 0:04:21

ChatGPT联网搜索失败,92%开发者误判为网络问题——真实根因竟是LLM推理会话上下文污染导致Search Agent进程静默退出(含strace复现脚本)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT 联网搜索失败 当 ChatGPT 的联网搜索功能无法正常工作时,用户常遇到“搜索不可用”“未连接到互联网”或空白响应等现象。该问题并非模型本身缺陷,而是由权限配置、网络…

2026/7/13 11:33:05

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…