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

深入List集合:ArrayList与LinkedList的底层逻辑与区别

目录

一、前言

二、基本概念

三、相同之处

四、不同之处

五、ArrayList 底层

六、LinkedList 底层

七、ArrayList 应用场景

八、LinkedList 应用场景

九、ArrayList和LinkedList高级话题 

十、总结


一、前言


        在Java集合的广阔舞台上,ArrayList与LinkedList以其独特的魅力,演绎着数据结构与算法的微妙平衡。一个静如处子,以数组之基,实现高效随机访问;一个动如脱兔,借链表之灵,擅长灵活插入删除。让我们一同潜入技术深海,探寻这两大集合类的独特魅力与适用之道。

二、基本概念


ArrayList定义:
        ArrayList是Java中的一个动态数组实现,它属于List接口的子类。ArrayList能够根据需要自动调整其大小,存储的元素是有序的,并且可以通过索引快速访问。它支持泛型,可以存储任何类型的对象,同时提供了添加、删除、查找和遍历等一系列常用的操作方法。
LinkedList定义:
        LinkedList是Java中的一个双向链表实现,同样实现了List接口。与ArrayList不同,LinkedList中的元素不是存储在连续的内存空间中,而是通过节点之间的引用连接起来的。每个节点都包含数据部分以及指向前一个和后一个节点的引用。LinkedList也支持泛型,并提供了与ArrayList类似的常用操作方法。


三、相同之处


        ArrayList和LinkedList作为Java中List接口的实现类,具有一些共同点。它们都能够动态地存储元素,并且可以根据需要自动调整容量大小。同时,它们都支持泛型,可以存储任何类型的对象,并且保证了类型安全。
        这两种集合类都维护了元素的插入顺序,使得元素可以按照添加的顺序进行访问。此外,它们都提供了一系列常用的操作方法,如添加、删除、查找和遍历等,这些操作都可以通过List接口中的方法进行调用。
        因此,在Java编程中,ArrayList和LinkedList都可以作为有序集合类来使用,根据具体需求选择适合的实现类即可。
 


四、不同之处


        ArrayList和LinkedList是Java中两种常用的List接口实现,它们在内部实现和性能特性上存在显著差异。
        ArrayList基于动态数组,支持通过索引快速访问元素,但在插入和删除元素时可能需要移动其他元素,时间复杂度较高。而LinkedList则基于双向链表,插入和删除操作只需修改相关节点的前后引用,时间复杂度较低,但随机访问元素需要从头节点开始遍历,性能较差。
        此外,ArrayList在内存上需要预留空间并可能在扩容时产生额外开销,而LinkedList的每个节点则需要额外的内存来存储前后节点的引用。因此,在选择时应根据具体使用场景来决定。

五、ArrayList 底层


        arraylist集合的底层其实是基于数组实现的,数组我们并不陌生。
        数组的特点:数组其实实在内存当中的一块连续区域,并且它会把这一块连续的区域分割成若干个相等的小区域,每块区域都有自己的索引,每个区域都是用来装一个数据的。
 
        数组最重要的特点就是他的查询速度是非常快的,但是很多人直接说数组的查询速度很快,这个其实是不准确的,它严格来说是根据索引查询数据比较的快。从头到尾的查很慢。
        但是如果是根据索引来查就是非常快的了,就比如说需要查2号索引处的数据,它可以一下子定位数组位置,因为数组有一个自己的起始地址,起始地址可以找到最左侧的位置,如果要查2号索引处的数据,直接让起始地址加2,就可以定位到索引为2的位置,最后将数值C取出来。
        同样,如果要查5号索引处的数值,那么直接让起始索引加5就可以了。所以这才是它根据索引查询速度快的原因。也就是它是通过地址值加索引来进行定位的查询任意数据耗时是相同的。也就是不管你是查询2号位置的数据还是5号位置的数据它所要耗费的时间是一样的,所以说它根据索引查询速度快。
        但是它的删除效率是很低很低的,如果要删除B值,删除以后需要将后面的所有值一个一个的向前挪一位,这样才能保证数据的连续性,所以如果数据量大的时候,这样大量的去迁移数据的时候,就会带来一些性能问题,所以说它的删除效率是比较低的。


        同样,添加的时候也是效率极低的,需要将添加位置后面的所有数据向后移动。或者是当我的数组已经满了的时候,我再添加数据的时候我这里面不够放怎么办?他又要扩容,就是把数组的范围变大,然后再把数据又迁移过来再把新添加的数据放在空出来的位置上去。所以又要扩容又要迁移,他的效率一定是不会高的。


        那么扩容到底是如何使用数组来实现的呢?细节是怎么回事呢?
        当我们使用无参构造器去创建这个集合对象的时候,他就会在底层创建一个默认长度为0的数组,也就是一个没有任何数据的空数组然后会用一个size来记录数组的大小,当我们第一次添加数据到里面去的时候,他会创建一个新的长度为10 的数组,交给elementData来记录。
 
        在添加第一个数据之后,会将size指向它的第二个索引。同理,每加一次数据之后,size都回向后移动相应的距离。
 
 
        当数组存满之后要怎么办呢?

        当我们在存第11个数据的时候,他就会自动将数组的长度扩容到原来的1.5倍,也就是将数组长度变为15。但是注意,它是创建了一个长度为15 的数组,所以它会再将原来长度为10 的数组内的原数据迁移到长度为15 的新数组中,然后再把新数组放到后面去。
 
 
        如果一次性添加多个数据,比如说如果一次性添加11个数据,那么它其实1.5倍是依旧不够放下数据的。
        所以它此时会创建一个长度为实际长度为准的数组,也就是10+11=21位长度的数组,然后再将数据添加进去。

总结:查询快,增删慢。

六、LinkedList 底层


        Linkedlist的底层是基于双链表实现的
        那么什么是链表呢?链表起始是由一个一个结点组成的,这些结点在内存中并不是连续存储的,而是在内存中分散存储的,但是链表的每个结点他除了会包含数据值之外,还会包含下一个结点的地址信息,通过这个地址信息,我们是可以找到下一个地址结点的,这样就实现了一个结点链接另一个结点的形式,这就是所谓的链表。
 
(如图所示),我们可以从头开始顺藤摸瓜的找到每一个结点。也就是找到每一个数据进行相应的处理。
        那么链表是如何形成的呢?
        在添加第一个数据A的时候,它会被记为链表的头结点,我们可以通过地址找到头结点再找到整个列表。再添加第二个数据B,数据会有一个自己的地址,假如说地址是11,然后它会将地址交给头结点A来记住。
 
        同理,再向后添加数据D、E 的时候,只需要使前一个数据记住他们的地址值即可完成首尾相连的链表形结构。
 
        那么链表数据结构有什么特点呢?
 
        查询比较慢:无论查询哪个数据都要从头开始找,包括根据索引查也同样是慢的,为什么呢?比如说要找到第二个位置处的数据,是不能马上找到第二个索引位置处的,因为它的元素在内存中不是连续的,不可能通过头部地址一下子定位到这个位置,即使要找2号索引位置处的数据也只能从头开始找。

        增删比较快:如果需要在链表中添加一个数据C,那么只需要把数据C放到任何一个位置,然后让C对应的下一个数据地址指向D,然后让B指向C(将B存储的下一个数据地址改成C的地址)。
 
        这样就添加进去了,也不需要挪动原来元素的位置。而且也不存在扩容的问题,因为它的元素在内存中都是分散存储的,无论加多少数据都是不存在扩容或者移动原来元素位置的。所以说添加的速度是比较快的。
 
        如果要删除CE之间的数据D,那么只需要将C对应的下一个数据地址指向数据E,然后再将数据D删除就可以了。也不需要迁移元素。
 
        单向链表与双向链表
        linkedlist是双向链表,除了从前往后查找之外,同时它的每一个结点也会记前一个结点的地址,也就是说可以从为结点开始从后往前找。所以双向链表就是可以从两头开始查。所以说双向链表的查询速度要胜于单向链表,但是因为链表只能从前往后找或者从后往前找,所以他的查询速度还是要慢于可以直接利定位索引位置的数组的。只是增删的时候速度要优于数组。
 
        在java中大多数情况都会使用双向链表。

七、ArrayList 应用场景


        ArrayList 是一种基于数组实现的动态数据结构,在Java集合框架中扮演着重要角色。它通过自动调整数组大小来适应元素数量的变化,提供了高效且灵活的存储方式。以下是ArrayList在多个生动应用场景中的具体应用:
        1.    动态数组存储
场景描述:
        想象你正在编写一个程序,需要存储用户输入的一系列数据,但事先并不知道用户会输入多少数据。这时,一个能够动态调整大小的数组就显得尤为重要。
ArrayList应用:
        ArrayList正是为此而生。它可以根据需要自动调整大小,无需担心数组越界的问题。你可以随时向ArrayList中添加或删除元素,而无需手动管理数组的大小。
        2.    批量数据处理
场景描述:
        在数据分析或科学计算中,经常需要处理大量的数据。这些数据可能来自文件、数据库或网络请求等。
ArrayList应用:
        ArrayList提供了高效的批量数据处理能力。你可以将大量数据一次性添加到ArrayList中,然后利用Java提供的各种集合操作方法来处理这些数据,如排序、搜索、过滤等。
        3.    对象集合管理
场景描述:

        在面向对象编程中,经常需要管理一组对象。例如,你可能有一个Person类,需要存储多个Person对象的集合。
ArrayList应用:
        ArrayList支持泛型,可以确保类型安全。你可以创建一个ArrayList<Person>来存储Person对象的集合,并利用ArrayList提供的各种方法来管理这些对象,如添加、删除、查找等。
        4.    作为方法参数和返回值
场景描述:

        在编写方法时,有时需要传递或返回一组数据。这些数据可能来自方法的内部处理,也可能需要传递给其他方法进行处理。
ArrayList应用:
        ArrayList可以作为方法参数和返回值来传递或返回一组数据。这样,你可以利用ArrayList的灵活性和高效性来简化方法的编写和调用。
        5.    实现简单的数据结构
场景描述:

        在算法和数据结构的学习中,经常需要实现一些简单的数据结构,如栈(Stack)和队列(Queue)的简化版。
ArrayList应用:
        虽然ArrayList不是专门为栈和队列设计的,但你可以利用它的动态调整大小和随机访问特性来实现这些数据结构的简化版。例如,你可以使用ArrayList的add方法在末尾添加元素来实现栈的压栈操作,使用remove(int index)方法或get(int index)方法结合remove方法来实现栈的弹栈操作;同样地,你也可以使用ArrayList来实现队列的简化版。

八、LinkedList 应用场景


        LinkedList 是一种非常灵活的数据结构,它基于链表的原理,通过节点(Node)之间的引用(或指针)来存储数据。每个节点包含数据部分和指向下一个节点的引用。这种结构使得 LinkedList 在很多应用场景中都表现出色。
        1. 队列(Queue) - 先进先出(FIFO)
场景描述:

        想象你在一家银行排队办理业务。第一个人先来,第一个被服务;后来的人只能排在队伍后面,等待前面的人办完业务后再轮到自己。这就是典型的先进先出(FIFO)原则。
LinkedList应用:
        在 LinkedList 中,我们可以将队列设计成使用头节点(head)和尾节点(tail)来管理。新元素总是添加到队列的尾部,而移除操作总是从队列的头部进行。这样,最早加入的元素总是最先被移除。
        2. 栈(Stack) - 后进先出(LIFO)
场景描述:

        想象你有一堆书,每次你只能看到最上面的一本书。如果你想取一本书,你必须先移除上面的所有书。这就是后进先出(LIFO)原则。
LinkedList应用:
        在 LinkedList 中,栈的实现非常简单。我们只需要一个指向栈顶(即最后一个加入的元素)的引用。新元素总是添加到栈顶,移除操作也总是从栈顶进行。这样,最后加入的元素总是最先被移除。
        3. 双向链表(Doubly Linked List) - 双向遍历
场景描述:

        想象你在一个环形跑道上跑步,你可以向前跑,也可以随时停下来向后跑。双向链表允许你从任意节点向前或向后遍历。
LinkedList应用:
        双向链表(Doubly Linked List)的每个节点除了包含数据和指向下一个节点的引用外,还包含一个指向前一个节点的引用。这使得双向链表在需要频繁进行前后遍历的场景中非常有用,比如实现撤销(Undo)操作、滑动窗口算法等。
        4. 散列表的冲突解决(Linked List as a Collision Resolution Method)
场景描述:

        想象你有一个很大的书架,但上面的书没有按照任何顺序排列。当你想要找一本书时,你可能需要从头开始一本一本地找,直到找到为止。在散列表(Hash Table)中,如果两个键的哈希值相同(即发生冲突),我们可以使用链表来解决这个冲突。
LinkedList应用:
        在散列表的实现中,当发生冲突时,我们可以将具有相同哈希值的元素存储在一个链表中。这样,虽然查找某个特定元素可能需要遍历链表,但总体上仍然保持了散列表的高效性。
        5. 实现图(Graph)的邻接表(Adjacency List)
场景描述:

        想象你有一张复杂的交通网络图,每个城市都是一个节点,城市之间的道路是连接这些节点的边。邻接表是一种用链表来表示图中节点之间连接关系的方法。
LinkedList应用:
        在图的邻接表表示法中,每个节点都有一个链表,链表中包含与该节点直接相连的所有节点。这种方法在处理稀疏图(即边数远少于节点数平方的图)时非常高效,因为它避免了使用二维数组来存储边信息时的空间浪费。

九、ArrayList和LinkedList高级话题 


        在Java中,ArrayList和LinkedList作为两种常见的集合实现,与多种设计模式有着密切的联系。以下是与ArrayList和LinkedList相关的一些设计模式介绍:
        迭代器模式(Iterator Pattern)
        迭代器模式是一种设计模式,它提供了一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。在Java中,ArrayList和LinkedList都实现了Iterable接口,因此它们都支持迭代器模式。
o    特点:
o    提供一个统一的接口来遍历集合中的元素,而无需了解集合的内部结构。
o    迭代器模式将集合的遍历操作从集合类中分离出来,使得集合类的职责更加单一。
o    在ArrayList和LinkedList中的应用:
o    ArrayList和LinkedList都通过实现Iterable接口来提供迭代器。
o    迭代器内部维护了一个指向当前元素的游标(cursor),通过调用hasNext()和next()方法来遍历集合中的元素。
        观察者模式(Observer Pattern)
        虽然ArrayList和LinkedList本身并不直接实现观察者模式,但它们可以作为观察者模式中的被观察对象(Subject)或观察者(Observer)来使用。
o    特点:
o    定义对象间的一种一对多的依赖关系,当一个对象改变状态时,其相关依赖对象皆得到通知并被自动更新。
o    观察者模式主要用于实现事件处理系统、消息广播系统等。
o    在ArrayList和LinkedList中的潜在应用:
o    如果有一个集合对象(如ArrayList或LinkedList)需要通知其他对象关于其内容的变化(如添加、删除元素),那么可以将该集合对象作为被观察对象,其他对象作为观察者。
o    当集合对象发生变化时,它可以通过调用观察者的更新方法来通知它们。
        然而,需要注意的是,在Java的标准库中,ArrayList和LinkedList并没有直接提供对观察者模式的支持。如果需要实现观察者模式,通常需要自定义一个被观察对象类,并在该类中维护一个观察者列表,以及相应的添加、删除和通知观察者的方法。
        其他相关设计模式
除了迭代器模式和观察者模式外,还有一些其他设计模式与ArrayList和LinkedList有关,如:
o    工厂模式:可以用于创建ArrayList或LinkedList的实例,而无需直接调用它们的构造函数。
o    单例模式:虽然与ArrayList和LinkedList的直接关系不大,但在某些情况下,可以使用单例模式来确保一个集合类只有一个实例(尽管这通常不是集合类的常见用法)。
o    装饰器模式:可以用于在不修改现有集合类的情况下,为其添加新的功能或行为。例如,可以        创建一个装饰器类来包装一个ArrayList或LinkedList,并在其基础上添加日志记录、性能监控等功能。
        总的来说,ArrayList和LinkedList作为Java集合框架中的核心组件,与多种设计模式有着紧密的联系。通过理解和应用这些设计模式,可以更加灵活地使用这些集合类,并构建出更加健壮、可扩展和可维护的软件系统。


十、总结


        ArrayList是一种高效且灵活的动态数据结构,在多个应用场景中都表现出色。从简单的动态数组存储到复杂的对象集合管理,再到作为方法参数和返回值传递或返回一组数据,ArrayList都能提供高效且直观的解决方案。通过理解ArrayList的工作原理和应用场景,我们可以更好地利用这种数据结构来解决实际问题。

如果文章对您有帮助,还请您点赞支持
感谢您的阅读,欢迎您在评论区留言指正分享

相关文章:

深入List集合:ArrayList与LinkedList的底层逻辑与区别

目录 一、前言 二、基本概念 三、相同之处 四、不同之处 五、ArrayList 底层 六、LinkedList 底层 七、ArrayList 应用场景 八、LinkedList 应用场景 九、ArrayList和LinkedList高级话题 十、总结 一、前言 在Java集合的广阔舞台上&#xff0c;ArrayList与LinkedLis…...

mac安装appuim

要在macOS上安装Appium&#xff0c;这是一个自动化测试框架&#xff0c;可以用来对移动应用进行测试&#xff08;支持iOS和Android应用&#xff09;。为了安装Appium和其依赖的环境&#xff0c;你需要做一些准备工作。以下是详细的安装步骤&#xff1a; 前提条件 1、macOS系统…...

Telegram bot Mini-App开发实践---Telegram简单介绍与初始化小程序获取window.Telegram.WebApp对象并解析

➡️【好看的灵魂千篇一律,有趣的鲲志一百六七!】- 欢迎认识我~~ 作者:鲲志说 (公众号、B站同名,视频号:鲲志说996) 科技博主:极星会 星辉大使 后端研发:java、go、python、TS,前电商、现web3 主理人:COC杭州开发者社区主理人 、周周黑客松杭州主理人、 AI爱好…...

绿光一字线激光模组:工业制造与科技创新的得力助手

在现代工业制造和科技创新领域&#xff0c;绿光一字线激光模组以其独特的性能和广泛的应用前景&#xff0c;成为了不可或缺的关键设备。这种激光模组能够发射出一条明亮且精确的绿色激光线&#xff0c;具有高精度、高稳定性和长寿命的特点&#xff0c;为各种精密加工和测量需求…...

鸿蒙进阶篇-Math、Date

“在科技的浪潮中&#xff0c;鸿蒙操作系统宛如一颗璀璨的新星&#xff0c;引领着创新的方向。作为鸿蒙开天组&#xff0c;今天我们将一同踏上鸿蒙基础的探索之旅&#xff0c;为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…...

定时器简介

TIM(Timer定时器)简介 在第一部分,我们主要讲的是定时器基本定时的功能&#xff0c;也就是定一个时间&#xff0c;然后让定时器每隔这个时间产生一个中断&#xff0c;来实现每隔一个固定时间执行一段程序的目的&#xff0c;比如你要做个时钟、秒表&#xff0c;或者使用一些程序…...

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会&#xff0c;3C产品&#xff08;涵盖计算机类、通信类和消费类电子产品&#xff09;已成为我们日常生活中不可或缺的重要元素。与此同时&#xff0c;这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…...

redis:主从复制

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言主从模式复制拓扑结构主从节点建立复制流程数据同步 psyncpsync运行流程全量复制流程部分复制流程实时复制总结 前言 分布式系统&#x…...

思考Redis的用途 2024-11-19

一.分布式锁 这个要保证多个服务器执行一段逻辑时的锁操作&#xff0c;就用这个。如&#xff1a;账号注册&#xff0c;防止同一个账号注册多次。 二.全局共享数据 1.多个Game服情况下&#xff0c;要共享一些数据&#xff0c;比如&#xff1a;登录token信息之类的。 痛点&…...

根据条件 控制layui的table的toolbar的按钮 显示和不显示

部分代码&#xff1a; <!-----查询条件-----> <input type"date" id"StartDate" onchange"PageList()" /> <input type"date" id"EndDate" onchange"PageList()" /><!-----表格Table-----&…...

什么是C++中的初始化参数列表,它的作用是什么?

在 C 中&#xff0c;初始化参数列表&#xff08;Initialization List&#xff09;是一个构造函数的特性&#xff0c;用于初始化类成员变量和基类。它是在构造函数的声明中&#xff0c;以冒号&#xff08;:&#xff09;开头&#xff0c;跟随一系列成员变量的初始化表达式的列表。…...

python基础之学生成绩管理系统

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 while…...

SQL Server Management Studio 的JDBC驱动程序和IDEA 连接

一、数据库准备 &#xff08;一&#xff09;启用 TCP/IP 协议 操作入口 首先&#xff0c;我们要找到 SQL Server 配置管理器&#xff0c;操作路径为&#xff1a;通过 “此电脑” 右键选择 “管理”&#xff0c;在弹出的 “计算机管理” 窗口中&#xff0c;找到 “服务和应用程…...

大数据挖掘期末复习

大数据挖掘 数据挖掘 数据挖掘定义 技术层面&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;提取隐含在其中、人们事先不知道的、但又潜在有用的信息的过程。 数据准备环节 数据选择 质量分析 数据预处理 数据仓库 …...

凸函数与深度学习调参

问题1&#xff1a;如何区分凸问题和凹问题&#xff1f; 问题2&#xff1a;深度学习如何区分调参&#xff1f;...

Java前端基础——CSS

一、CSS介绍 1.1 什么是CSS CSS(Cascading Style Sheet)&#xff0c;层叠样式表,用于控制页面的样式. CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. 1.2 基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针…...

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…...

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目&#xff0c;《每日记鸭》微信小程序上线了&#xff01; 主要是技术栈&#xff1a;uniapp,koa2,mongodb,langchian&#xff1b; 感兴趣的小伙伴可以来捧捧场&#xff01;...

Linux移植IMX6ULL记录 一:编译源码并支持能顺利进入linux

目录 前言 一、不修改文件进行编译 二、修改设备树文件进行编译 前言 我用的开发板是100_ask_imx6ull_pro&#xff0c;其自带的linux内核版本linux-4.9.88&#xff0c;然后从linux官网下载过来的linux-4.9.88版本的arch/arm/configs/defconfig和dts设备树文件并没有对imx6ull…...

idea正则表达式-正则替换示例-2024.11笔记

注意idea中反向引用的格式是【$1】换行符是【\n】 需要在如下的代码中往接口的方法中添加一行注解&#xff0c;注解需要用到以后注解的中文备注 原文 Autowired private WomanService womanService; /** * 自定义分页 */ PostMapping("/page/{current}/{…...

Github 2024-11-20C开源项目日报 Top9

根据Github Trendings的统计,今日(2024-11-20统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目9Assembly项目1raylib: 用于视频游戏编程的简单易用图形库 创建周期:3821 天开发语言:C协议类型:zlib LicenseStar数量:18556 个Fork数…...

安卓CameraX的使用

如果要在安卓应用中操作相机&#xff0c;有三个库可以选&#xff1a; Camera&#xff08;已废弃&#xff09;&#xff1a;Camera是安卓最早的包&#xff0c;目前已废弃&#xff0c;在Android 5.0&#xff08;API 级别 21&#xff09;的设备上操作相机可以选择该包&#xff0c;…...

unity3d——基础篇小项目(开始界面)

示例代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class BeginPanel : BasePanel<BeginPanel> {public UIButton btnBegin;public UIButton btnRank;public UIButton btnSetting;public UIButton btnQuit; …...

【YOLOv8】安卓端部署-1-项目介绍

【YOLOv8】安卓端部署-1-项目介绍 1 什么是YOLOv81.1 YOLOv8 的主要特性1.2 YOLOv8分割模型1.2.1 YOLACT实例分割算法之计算掩码1.2.1.1 YOLACT 的掩码原型与最终的掩码的关系1.2.1.2 插值时的目标检测中提取的物体特征1.2.1.3 coefficients&#xff08;系数&#xff09;作用1.…...

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧&#xff0c;在使用安卓手机fiddler抓包时&#xff0c;即使信任了证书&#xff0c;并且手机也安装了证书&#xff0c;但是还是无法捕获https请求的问题&#xff0c;最开始不知道原因&#xff0c;后来慢慢了解到现在有的app为了防止抓包&#xff0c;把…...

11.20 深度学习-pytorch包和属性的基础语法

import torch import numpy as np def sci_close(): # 关闭pytorch 数据打印出来时科学计数法 torch.set_printoptions(sci_modeFalse) pass return 0 def create_tensor(): # 创建张量 t1torch.tensor(5) # 一阶张量 阶数看你传入的矩阵是多少阶的 这个是标量 不是一阶 一阶…...

SpringMVC域对象共享数据

目录 一.向 request 域对象共享数据 1.1使用ServletAPI向request域对象共享数据 1.2使用ModelAndView向request域对象共享数据 1.3使用Model向request域对象共享数据 1.4使用map向request域对象共享数据 1.5使用ModelMap向request域对象共享数据 二.Model、ModelMap、Ma…...

每日论文23-24ESSERC 6.4-16.1Ghz混合并联-串联谐振器

《A 6.4-to-16.1GHz Hybrid Parallel-Series Resonator Mode-Switching Oscillator with 206.6dBc/Hz FoMT at 1MHz Offset in 40nm CMOS》 24ESSERC 首先这篇文章有个地方我其实没太明白&#xff0c;它在title和行文的时候都写的是“ hybrid parallel-series resonator mode-…...

【软考】系统架构设计师-信息安全技术基础

信息安全核心知识点 信息安全5要素&#xff1a;机密性、完整性、可用性、可控性、审查性 信息安全范围&#xff1a;设备安全、数据安全、内容安全、行为安全 网络安全 网络安全的隐患体现在&#xff1a;物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理 …...

kali搭建pikachu靶场

前言&#xff1a; 总所周知搭个网站需要有apachemysqlphp&#xff0c;Apache是一个开源的Web服务器软件&#xff0c; MySQL是一种关系型数据库管理系统&#xff08;数据库&#xff09;&#xff0c;PHP是一种在服务器上执行的脚本语言 文章内容来自&#xff1a;【黑帽编程与攻…...

找人做网站不算诈骗罪吗/seo关键词排名优化推荐

我觉得下面文章讲的非常不错&#xff0c;适合nodejs入门学习。 七天学会NodeJS...

秦皇岛网站开发多少钱/微商营销技巧

谷歌小恐龙是一款在谷歌上断网就可以玩的小游戏。当然&#xff0c;如果你不想断网&#xff0c;输入网址chrome://dino也可以进入。 游戏开始时会有一只小恐龙&#xff0c;你可以用空格键控制它跳跃&#xff0c;也可以用上键控制它跳跃&#xff0c;下键控制它下蹲躲避障碍物。 …...

江西网站备案要求/项链seo关键词

[机器学习][3]--口袋算法与线性回归今天将会接着第一篇文章的PLA算法接着讲下去&#xff0c;将会去优化PLA算法。 首先有个问题需要说一下&#xff0c;一般来说&#xff0c;如果要测试某个模型的可用性&#xff0c;最好就是利用真实数据。但是由于我没能找到好的数据来做测试…...

百度推广送企业网站吗/seo服务顾问

原文&#xff1a;http://blog.csdn.net/carl_zhong/article/details/12219485 CCShaderCache 类似 textureCache&#xff0c;spriteFrameCache &#xff0c;AnimationCache&#xff0c;主要功能是对ShaderProgram进行记录&#xff0c;保留一份索引&#xff0c;供其他模块调用获…...

怎么找人做淘宝网站吗/网站之家查询

IBM近年来在云计算业务方面从未放慢过脚步&#xff0c;从与国内知名大学合作建设数据中心、到为国内已有的数据中心提供优化解决方案、再到建立云计算解决方案中心。 在2010年底IBM提出将会大幅调整云计算战略&#xff0c;希望推动云计算业务在未来发展中成为IBM业务主流推动力…...

网站搭建服务/百度站长平台链接

云原生技术的不断普及&#xff0c;不仅让使用Kubernetes部署应用成为了当下最主流的方式&#xff0c;而且标志着众多企业迈入了多集群时代。随着集群数量的不断增长&#xff0c;企业在集群管理和运维方面也迎来了诸如集群配置重复劳动、维护管理繁琐等等问题和挑战。01 多集群生…...