ajax返回list前台遍历_List、set集合接口分析

一、List接口详解

24bde1b584cf831cdc2440e2e3e7fc3c.png

1、List接口有三个实现类,ArrayList、LinkedList、Vector

2、三个实现类的异同点:

(1)ArrayList: 作为list接口的主要实现类;线程不安全,效率高底层使用Object[]存储

(2)LinkedList: 对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双 向链表存储

(3)Vector: 作为list接口的古老实现类;线程安全的,效率低;底层使用Object[]存储

相同点:

三个类都是实现了list接口,存储数据特点相同:存储有序的、可重复的数据

3、ArrayList的源码分析:

(1)jdk 1.7下的情况:

ArrayList list = new ArrayList(); // 底层创建了长度是10的Object[]数elementDate

list.add(123); //elementDate[0] = new Tnteger(123);

.....

list.add(111); // 如果此次的添加导致底层elementDate数组容量不够,则扩容。默认情况下,扩容为原来的容量的1.5倍,同时需要将原来数组中的数据复制到新的数组中

结论: 建议开发中使用带参的构造器: ArrayList list = new ArrayList(int capacity)

(2)jdk1 1.8下的情况:

ArrayList list = new ArrayList(); // 底层Object[] elementDate初始化为{}并没有创建长度为10的数组

list.add(123); // 第一次调用add()方法,底层才创建了长度为10的数组,并将数据123添加到elementDate[]数组中, 后续的添加和扩容操作和jdk 1.7一样

(3) jdk7中的ArrayList的对象的创建类似于单例模式中的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例模式中的懒汉式,延迟了数组的创建,节省内存。

4、ArrayList中常用的方法

增:add(Object obj)

删:remove(int index) / remove(Object obj)

改:set(int index, Object ele)

查: get(int index)

插:add(int index, Object obj)

获取长度: size()

遍历:① Iterator迭代器方式

② 增强for循环

③ 普通的循环

5、LinkedList的源码分析:

LinkedList list = new LinkedList(); // 内部声明了Node类型的first和last属性,默认值为null

list.add(123); //将123封装到Node中,创建了Node对象

其中,Node定义为:体现了LinkdList的双向链表的说法

private 

6、Vector的源码分析:jdk7和jdk8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组,在扩容方面,默认扩容为原来数组长度的2倍。

7、List接口中常用的方法

a8eccd14ded1cd124a759060c706e236.png
public 

二、set接口

1、set接口的特点:存储无序的、不可重复的数据

2、set接口的几个实现类:

(1)HashSet: 作为Set接口的主要实现类;线程不安全的:可以存储null值;HashSet底层:数组 + 链表的结构

-- LinkedHashSet: 作为HashSet的子类:遍历其内部数据时,可以按照添加的顺序遍历

(2) TreeSet: 可以按照添加对象的指定属性,进行排序。

3、set接口的特点:存储无序的、不可重复的数据说明

以HashSet为例说明:

(1)无序性: 不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加的,而是根据数据的哈希值

(2)不可重复性:保证添加的元素按照equals判断时,不能反悔true,即:相同的元素只能添加一个

public 

4、LinkedHashSet使用

作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据

优点:对于频繁的遍历操作,LinkedHashSet效率高于HashSet

5、Set接口中的添加方法的执行过程:(以HashSet为例)

向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素

如果此位置上没有其他元素,则元素a添加成功。 --- 情况1

如果此位置上有其他元素b(或以链表形式存在的多个元素)。则比较元素a与元素b的hash值:

如果hash值不相同,则元素a添加成功。 --- 情况2

如果hash值相同,进而需要调用元素a所在类的equals()方法:

equals()返回true,则元素a添加失败

equals()返回false,则元素a添加成功 --- 情况3

对于添加成功的情况2和情况3而言:元素a与已经存在指定索引位置上数据以链表的方式存储。

jdk 7: 元素a放在数组中,指向原来的元素

jdk 8: 原来的元素在数组中,指向元素a

总结:七上八下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚焦 | 数据湖分析如何面向对象存储OSS进行优化?

简介: 最佳实践,以DLA为例子。DLA致力于帮助客户构建低成本、简单易用、弹性的数据平台,比传统Hadoop至少节约50%的成本。其中DLA Meta支持云上15种数据数据源(OSS、HDFS、DB、DW)的统一视图,引入多租户、元…

如何把极坐标化为直角坐标_2019高考100题之063(极坐标)

分析&#xff1a;如果你对过原点的直线的参数方程(xtcosθ&#xff0c;ytsinθ(参数t∈R))理解透彻了&#xff0c;那么极坐标也就没有任何问题了&#xff0c;特别是对于ρ<0的理解&#xff0c;就和t<0类似.教材上说了不作特殊说明&#xff0c;ρ都是大于零的&#xff0c;…

c语言队列作用,队列(C语言)

一、定义一种可以实现“先进先出”的存储结构。二、分类1、链式队列&#xff1a;用链表实现。2、静态队列&#xff1a;用数组实现。静态队列通常都必须是循环队列。3、循环队列(1)循环队列需要几个参数来确定&#xff1f;需要2个参数来确定&#xff1a;front、rear(2)循环队列各…

2021银行共探转型新动能:大行酝酿质变 小行跨越数字鸿沟

2021年&#xff0c;我国“十四五”规划开篇启程&#xff0c;数字经济蓬勃发展&#xff0c;银行业紧跟国家发展大局&#xff0c;全力推进数字化转型向纵深发展&#xff0c;探寻行业新动能&#xff0c;积极参与全社会数字生态建设&#xff0c;为数字中国高质量发展贡献金融力量。…

如何构建一个拖垮整个公司的运维系统

简介&#xff1a; 人肉运维&#xff0c;不在 DevOps 中转型&#xff0c;就在自动化中消亡。云化时代的运维&#xff0c;需要的是高铁&#xff0c;而不是“跑的更快的马车”。6月25日&#xff0c;数智创新行上海站智能运维专场&#xff0c;期待您的参与。 原文链接 本文为阿里云…

idea 安装php插件_免费版的 IDEA 为啥不能使用 Tomcat ?

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2 分钟。来自&#xff1a;https://urlify.cn/2Ifiiiidea有两大版本&#xff0c;一个是Ultimate版本&#xff0c;一个是Community版&#xff0c;ultimate是需要收费的&#xff0c;Community版是开源免费的。然…

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

简介&#xff1a; 随着公司业务的不断发展&#xff0c;流量也在不断增长。我们发现生产中的一些重大事故&#xff0c;往往是被突发的流量冲跨的&#xff0c;对流量的治理和防护&#xff0c;保障系统高可用就尤为重要。 作者&#xff5c;梁勇 ​ 背景 ​ 哈啰已进化为包括两轮…

休闲食品行业如何数字化升级,腾讯云和卫龙辣条一起打了个样

11月26日&#xff0c;腾讯云与卫龙集团达成战略合作&#xff0c;双方将整合各自优势资源&#xff0c;助力卫龙集团建设专有云平台&#xff0c;围绕生产、运营、管理层面进行全链路数字化&#xff0c;加速卫龙集团转型升级&#xff0c;打造休闲食品行业标杆。 作为一家年销售超过…

Vite + React 组件开发实践

简介&#xff1a; 毫不夸张的说&#xff0c;Vite 给前端带来的绝对是一次革命性的变化。或者也可以说是 Vite 背后整合的 esbuild 、 Browser es modules、HMR、Pre-Bundling 等这些社区中关于 JS 编译发展的先进工具和思路&#xff0c;在 Vite 这样的整合推动下&#xff0c;给…

canvas全局合成画月牙_GIF动态图,视频?都能用Python转换成字符画图像

字符画是一种由字母、标点或其他字符组成的图画&#xff0c;它产生于互联网时代&#xff0c;在聊天软件中使用较多&#xff0c;本文我们看一下如何将自己喜欢的图片转成字符画。静态图片首先&#xff0c;我们来演示将静态图片转为字符画&#xff0c;功能实现主要用到的 Python …

开发者看过来,5 行代码实现身份认证,Authing 如何做到的?

在没有学编程前&#xff0c;可能我们不会想到看起来简单的注册登录功能&#xff0c;其实并不简单&#xff0c;背后可能需要考虑&#xff1a; 1、支持用户用手机验证码、邮箱验证码登录&#xff1b; 2、用户连续登录失败&#xff0c;为了防止暴力破解&#xff0c;需考虑 24 小…

用c语言绘制自定义图形,Android使用自定义View绘图

使用自定义 View 绘图实例 MyViewCanvasDemo 自定义一个名为 MyView 的 View 类&#xff0c;并在其 onDraw() 方法中绘制简单的图像&#xff0c;运行效果如图 1 所示。图 1 简单的 View 绘图实例 MyViewCanvasDemo 没有使用布局文件&#xff0c;而是将自定义的 MyView 对象显示…

如何构建企业出海的“免疫力“?深入解读阿里云CDN安全能力

简介&#xff1a; 随着信息技术快速发展与应用&#xff0c;产业数字化和智能化趋势正日益加深&#xff0c;企业信息安全与防护被提升到前所有未有的高度。阿里云CDN经过10多年的技术发展时间&#xff0c;已逐步构筑一个边缘云的安全网络立体防护体系&#xff0c;包含了全链路安…

使用率激增 250%,这份报告再次将 Serverless 推向幕前

简介&#xff1a; 本文是对 Datadog 最新的一份 Serverless 报告的解读&#xff0c;欢迎大家留言讨论。 每项新技术的产生和演进过程中&#xff0c;都会有他自己的拥趸&#xff0c;也会有持怀疑论者。Serverless 的美在于他可以尽可能的解放客户在基础设施上的投入&#xff0c;…

dev用不了_跟风喊AMD YES?很多生产力项目,你必须用IU

大家好&#xff0c;我是小匠。现在的电脑市场中&#xff0c;高喊AMD YES几乎已经成为了一种政治正确了&#xff0c;尤其是在所谓的“生产力需求”的领域中。各大评测结果中也几乎都是AMD吊打Intel的局面。然而AU真的在所有生产力项目中都吊打IU吗&#xff1f;我可以负责任的告诉…

云计算到底是谁发明的?

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;大家都在讨论云计算、云原生&#xff0c;那你知道云计算是谁发明的吗&#xff1f;说到云计算的起源&#xff0c;公众普遍认为&#xff0c;谷歌前 CEO 埃里克施密特是云计算概念的第一个提出者。2…

c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...

C语言中静态变量是什么意思&#xff0c;有什么作用&#xff0c;static在数据类型前面表示什么最近刚看了C存储类的章节。所以来说说。C语言为变量提供了⑤种不同的存储模型&#xff0c;或者说是存储类。①个变量可以用存储时期描述&#xff0c;也可以用作用域描述&#xff0c;也…

如何专业化监控一个Kubernetes集群?

简介&#xff1a; 本文会介绍 Kubernetes 可观测性系统的构建&#xff0c;以及基于阿里云云产品实现 Kubernetes 可观测系统构建的最佳实践。 作者&#xff1a;佳旭 阿里云容器服务技术专家 引言 Kubernetes 在生产环境应用的普及度越来越广、复杂度越来越高&#xff0c;随之而…

如何构建一个拖垮整个公司的备份系统

简介&#xff1a; 在如今“数据即资产”的时代&#xff0c;有备才能无患。备份就像备胎&#xff0c;虽然大多人都知道备胎很重要&#xff0c;却很少有人检查。不发生点什么&#xff0c;你永远不知道TA对你有多重要。 原文链接 本文为阿里云原创内容&#xff0c;未经允许不得转…

6.7K Star 的知名开源项目源码,该怎么看?

作者 | 一只图雀来源 | 程序员巴士心理认知要到位首先要认识到&#xff0c;看源码是一个开始比较枯燥、同时时间跨度相对比较长的一个过程。所以看源码的第一步是找到自己想要了解领域、或者自己所在业务领域高度相关的项目&#xff0c;并且在这个领域比较出名&#xff0c;且维…