Java数据结构3(ArrayList与顺序表)

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割 Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。 阅读详情

目录

1.ArrayList的初步理解

2.ArrayList的三种构造方法

3.ArrayList的常见操作

4.ArrayList的遍历

5.ArrayList的扩容机制

6.ArrayList的具体使用

7.对ArrayList的思考

一,ArrayList的初步理解

ArrayList是数据结构的一种表现形式,可以理解为类似数组的一个顺序结构,功能更强的数组

二,相关构造方法

(1)不带参数的

 ArrayList<Integer> arrayList1=new ArrayList<>();
        arrayList1.add(1);
        arrayList1.add(2);
        arrayList1.add(3);

一是方法的实现,图二是不带参数的arraylist的源码,可以看到它是默认了大小为10

(2)带一个容量的

ArrayList<Integer> arrayList2=new ArrayList<>(15);
        arrayList2.add(11);
        arrayList2.add(22);
        arrayList2.add(33);

arraylist2给到了一个初始的容量15

(3)带集合构造

ArrayList<Integer> arrayList3=new ArrayList<>(arrayList1);
        arrayList3.add(999);
        System.out.println(arrayList3);

把另一个结构类似的Arraylist传给新的Arraylist,并且把对应的元素全都传给第二个,所以打印出来就是第一个的总和后面一次的add

三,常见操作及其解释

boolean add(E e)尾插e
void add(int index, E element)将e插入到index位置
boolean addAll (Collection<?extends E>d尾插c中的元素
Eremove(int index)删除index位置元素
boolean remove(Object o)删除遇到的第一个o
E get(int index)获取下标index的元素
E set(int index, E element)将下标index的元素设置为element
void clear()清空
boolean contains(Object o)判断o是不是在线性表中
int indexOf(Object o)返回第一个o所在下标
int lastIndexOf(Object o)返回最后一个o所在下标
List<E> subList(int fromlndex, inttolndex)截取部分list

四,遍历

(1)简单的for循环

ArrayList<Integer> arrayList1=new ArrayList<>();
        arrayList1.add(1);
        arrayList1.add(2);
        arrayList1.add(3);
        System.out.println(arrayList1);
        for (int i = 0; i < arrayList1.size(); i++) {
            System.out.print(arrayList1.get(i));
        }

通过get方法和for循环就可以很好的取到arraylist1中的所有元素

(2)foreach循环

ArrayList<Integer> arrayList1=new ArrayList<>();
        arrayList1.add(1);
        arrayList1.add(2);
        arrayList1.add(3);
        System.out.println(arrayList1);
        for (Integer i:arrayList1){
            System.out.print(i);
        }

将i作为arraylist1的每一个元素来遍历出来

(3)迭代器

ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        // 获取迭代器
        Iterator<String> it = list.iterator();
        // 循环:只要有下一个就继续
        while (it.hasNext()) {
            // 取出下一个元素
            String s = it.next();
            System.out.print(s);
        }

用迭代器(Iterator)遍历 ArrayList

五,扩容机制

这是ArrayList的扩容的源码,下面那个是在你默认add方法的时候进行的加一个空间,上面的是你超过默认容量的一个扩容,是进行一个1.5倍的扩容

六,具体的使用

我用一个洗牌算法来进行一个简单的演示

(1)第一步定义一个Card类,有数字和花色

public class Card {
    public int rank;        // 牌面值
    public String suit;        // 花色
    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }
    @Override
    public String toString() {
        return String.format("[%s %d]", suit, rank);
    }
}

(2)展示所有的牌

public static final String[] SUITS = {"♠", "♥", "♣", "♦"};
    public static List<Card> buycard(){
        List <Card> cards=new ArrayList<>();
        for (int i = 0; i < SUITS.length; i++) {
            for (int j = 1; j < 13 ; j++) {
                Card card=new Card(j,SUITS[i]);
                cards.add(card);
            }
        }
        return cards;
    }

(3)将牌打乱,进行一次洗牌(本质就是通过下标来交换牌,上面负责产生随机的下标)

public static void randoms(List<Card> cards){
        Random random = new Random();
        for (int i = cards.size()-1; i > 0 ; i--) {
            int index = random.nextInt(i);//[0,i)
            swap(cards,i,index);
        }
    }
    public static void swap(List<Card> cards,int i,int index){
        Card tmp=cards.get(i);
        cards.set(i,cards.get(index));
        cards.set(index,tmp);
    }

(4)三个人轮流摸五张牌(将所有牌定义为一个hands数组,三个人分别定义成为hand012数组,

可以看成一个二维数组)

List<Card> hand0=new ArrayList<>();
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<List<Card>> hands=new ArrayList<>();
        hands.add(hand0);
        hands.add(hand1);
        hands.add(hand2);
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card=cards.remove(0);
                hands.get(j).add(card);
            }
        }
        System.out.println(hand0);
        System.out.println(hand1);
        System.out.println(hand2);

七,思考

(1)Arraylist是连续的排列,所以删除和增加需要挪动其余的n-1个数据,所以时间复杂度为O(N),复杂度较高

(2)Arraylist的扩容默认为1.5倍,如果我只需要多一两个就会造成大量的空间浪费

使用rknn进行facenet部署 修改facenet网络的forward函数代码。 阅读详情

相关推荐

AI自主网络攻击技术深度解析:从LLM驱动到防御体系升级

网络安全领域正经历从自动化脚本到智能自主攻击的范式转变。其核心原理在于将大型语言模型(LLM)与自动化渗透测试框架深度融合,构建具备环境感知、决策规划和自适应能力的攻击系统。这种技术的核心价值在于实现了从预设步骤到目标驱动的质变,能自主完成信息收集、漏洞利用、横向移动等复杂攻击链。在应用场景上,它不仅能极大提升高级持续性威胁(APT)的攻击效率,也对渗透测试和红队演练技术提出了新的要求。面对此类由AI驱动的自主攻击,传统的基于签名的防御体系已显不足,必须转向以行为分析和零信任为核心的整体纵深防御。本次曝光的

weixin_34254464的博客 610

Java ArrayList 与顺序表:在编程海洋中把握数据结构的关键之锚

它犹如一位严谨的管家,将数据元素有条不紊地排列在连续的内存空间中,使得我们能够通过精确的索引迅速定位到所需的数据,就像在一本精心编排索引的书籍中快速找到特定章节一样高效。线性表,从直观上理解,是由一系列具有相同类型的数据元素按照特定的顺序依次排列而成的集合,其元素之间存在着一对一的线性关系。Java ArrayList 和顺序表,从原理到实现,从性能对比到应用场景分析,为你揭开它们神秘的面纱,引领你在 Java编程的数据结构之路上稳步前行,帮助你在面对各种数据处理挑战时做出明智而高效的抉择。

2301_80350265学无止尽5的博客 5953

Android架构中UseCase的设计原则与实战解析

本文深入解析Android架构中UseCase的设计原则与实战应用,探讨其在Domain Layer中的核心作用。通过对比ViewModel的臃肿问题,详细阐述UseCase的无状态原则、单一职责边界等设计铁律,并提供多种实现方式的代码示例,帮助开发者构建更清晰、高效的Android应用架构。

weixin_28432777的博客 431

【数据结构】顺序表与ArrayList

数据结构中的顺序表~

做梦都想要三十万年薪~ 2458

4、I3C协议详解

I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述..

迟子涵925的博客 2万+

IVP 2021 UNETR: Transformers for 3D Medical Image Segmentation

动机 具有跟踪和扩展路径的全卷积神经网络(FCNNs)(如编码器和解码器),近年来在各种医学图像分割应用中显示出了突出的地位。在这些体系结构中,编码器通过学习全局上下文表示来扮演一个不可或缺的角色,该全局上下文表示将进一步用于解码器的语义输出预测。 卷积层作为FCNN的主要构造块,其局部性限制了此类网络学习长时空间依赖的能力。 在NLP领域,基于transformer的模型已经在各种任务中实现了最先进的基准。transformer中的自我注意机制使他们能够动态地突出词序列的重要特征并学习其长时依赖关系。这

smile909的博客 1979

【数据结构与算法】ArrayList与顺序表

ArrayList和顺序表贯穿于数据结构底层,是我们掌握数据结构的重要基础,也是我们踏入数据结构刷题的第一步

bit me的博客 2075

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 336

【Java数据结构】初步认识ArrayList与顺序表(一)

所以这就是我们的顺序表第一部分内容,我们在这主要对顺序表进行了模拟,使我们在之后的学习中能更加理解顺序表的源码,学习其源码思想。在之后的顺序表第二部分我们将给大家介绍真正的顺序表ArrayList,敬请期待!

Easonmax的博客 1981

HDMI协议介绍(二)--DataIsland Packets

前文简单介绍了HDMI传输的三个周期:控制周期、DataIsland周期和Video周期。DataIsland传输音频和辅助数据,这些数据以Packet的形式传输。本文简单介绍DataIsland Packet。

SlamDunk的博客 5676

操作系统知识点汇总(王道)

操作系统不论是就业还是升学都是核心的一门课程,对于大部分工科更是必修课程。本文章是对《王道操作系统》所有知识点的总结笔记,以供大家学习以及在备考期间复习使用。让我们一起把知识往脑子里旋好吗!!!......

S mile0804的博客 5万+

数据结构之ArrayList与顺序表(上)

手动实现顺序表 分析 ArrayList 的源码 ArrayList的常见操作与遍历方式

我要学编程的博客 2254

【华为OD机试真题】3、 路灯照明问题 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。

KJ.JK 1万+

ArrayList与顺序表

这篇文章来和大家分享一下java集合框架与最基础的ArrayList的使用.老话说,读书百遍其义自见.这是我第二次学习一些新的心得与理解.我将从java集合框架到顺序表再到官方的arraylist进行分享~在 Java 集合框架中,迭代器(Iterator)是用于遍历集合元素的统一接口,它提供了一种不依赖集合底层结构的遍历方式,核心作用是 “解耦集合与遍历逻辑”。到这里我的分享就先结束了~,希望对你有帮助我是dylan 下次见~无限进步。

2402_89003542的博客 1029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java数据结构_ArrayList与顺序表_2

如果使用IDE集成开发环境,可以连续按两次shift键在点击进去之后,尽可以看到java已经为我们实现的ArrayList在集合框架中,ArrayList是一个普通的类,实现了List等等接口,上图也可以看到ArrayList继承了AbstraList,实现了等等接口,具体的框架图如下图。这里对ArrayList有六点说明。

Zz_waiting的博客 863

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【数据结构】ArrayList与顺序表

通过上篇博客的介绍,我们初步认识数据结构的基本知识,接下来与大家分享关于ArrayList与顺序表的相关知识。ArrayList是数组链表,也就是我们经常所说的顺序表。它是Java内置的,让我们更加方便地编写代码,下面我们就一起来了解ArrayList与顺序表的相关知识。super(msg);ArrayList具有以下的优缺点:根据指定下标去查找元素或更新元素的效率很高,时间复杂度为O(1)。在插入或删除数据时,不仅每一次都需要移动数据,如果要把数据插到0下标位置或删除0下标的数据,

m0_74336101的博客 1577

数据结构:ArrayList与顺序表

在上面我们自己实现了一个顺序表,但是在Java中编译器自带了一个顺序表ArrayList类,它同样实现了List接口,虽然它和我们自己实现的顺序表大同小异,但是它还有一些地方需要注意。ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList⽀持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的。

zm3rttqs9f的博客 1496

【JAVA】ArrayList与顺序表

本文对比分析了Java中的ArrayList与数据结构中的顺序表。ArrayList是基于动态数组实现的List接口实现类,支持随机访问、克隆和序列化,但非线程安全。文章详细介绍了ArrayList的构造方法、常用操作(如增删改查)以及三种遍历方式,并特别指出subList方法可能引发的共享空间问题。通过对比顺序表与ArrayList的实现原理,帮助开发者更好地理解两者的异同,从而在实际应用中做出更合理的选择。

m0_68002296的博客 989

Java-数据结构-顺序表(ArrayList)

在Java中,List是一个接口,它继承自Collection接口。List 接口代表一个有序的元素序列,允许元素重复。也就是说我们可以按照添加顺序存储一组元素,并且同一元素可以多次出现。List 接口为我们提供了许多方法来控制列表中的元素。我们可以通过这张关系图看出来,List在其中所处的位置,以及它继承什么,它的子类都有什么。在上图中,我们可以知道ArrayList 就是 List 的实现类,而ArrayList同时也是顺序表的一种。

爱是小小的癌的博客 1443

【JAVA数据结构】(ArrayList)顺序表

数据结构的顺序表——ArrayList的模拟实现,构造,使用,遍历,扩容机制,优缺点

2301_80038570的博客 1504

Java ArrayList与顺序表

我懒洋洋诚挚邀请你来看看我写的这篇博客

qq_52592775的博客 957

数据结构 之 顺序表 ArrayList (Java)

在该篇文章中,大概介绍了顺序表,以及模拟实现了顺序表中的常用方法;

AUGENSTERN_dc的博客 1535

【Java 数据结构】List,ArrayList与顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,ArrayList就是顺序表的一种实现形式2.2 实现自己的顺序表在学习ArrayList之前,我们可以先试着写一个自己实现的顺序表,能帮助我们在使用ArrayList的方法以及了解它时更加得心应手在集合框架中,ArrayList是一个普通的类,实现了List接口。具体框架如下:注意:ArrayList是以泛型的形式实现的,使用时必须要先实例化。

2401_89176842的博客 1294

【数据结构】ArrayList与顺序表 —— 有码有图有真相

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList是java.util包下的,使用的时候一定记着导包。ArrayList是以泛型方式实现的,使用时必须要先实例化。ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

小黑屋的黑小子的博客 1331

Java数据结构:ArrayList与顺序表1

List接口介绍、模拟实现ArrayList类中的增删查改方法

Zzzzmo_的博客 802

Java中List、ArrayList与顺序表

在集合框架中,List是一个接口,继承自Collection。Collection 也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:List的官方文档在数据结构的角度看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以进行增删查改以及变量等操作。方法解释booleanadd(E e)尾插 evoidadd将 e 插入到 index 位置booleanaddAll尾插 c 中的元素Eremove删除 index 位置元素boolean。

2201_76124988的博客 1181
上一篇: Java数据结构2
下一篇: Java数据结构4(自己实现简单LinkedList)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值