百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Java使用List集合会有哪些坑

toyiye 2024-06-21 12:05 9 浏览 0 评论

List集合系列的坑。

今天的课程来学习List集合中有哪些坑。

·坑点1:ArrayList并非ArrayList。使用Arrays初始化了一个集合,并向集合中添加新元素,代码执行会打印什么结果?结果添加元素时报错:unsupport operate。明明初始化了List,为什么add操作报错?来看看源码,Arrays初始化的集合是其内部类ArrayList,内部类ArrayList不是我们所熟知的ArrayList,并且这个内部类没有提供增删操作。

·坑点2:挥之不去的引用。使用Arrays初始化集合时,入参是数组,如果集合初始化完成后,修改数组,集合中的元素会变化么?实验结果中可以看到集合和切片同时被修改了。来看看源码,Arrays的初始化调用了内部类ArrayList的构造函数,在构造函数中沿用的是引用,而不是复制,所以这里修改数组,集合也会被同步修改。

·坑点3:List的subList方法,能把你干失业。使用循环,向全局变量data中,添加1万个长度为1的List。程序结束后,data中保存的是1万个长度为1的List,真的是这样么?结果却报错:OOM。来看看源码,subList方法调用了内部类SubList的构造函数,在构造函数中记录了原集合和对应的偏移量,也就是说集合切片后还对原来的集合保留着引用。这会引起原来的集合始终不能被回收,最终导致OOM。

需要注意的是,使用subList切片后,如果对原集合进行修改(切片与原集合共同部分),也会引起切片集合的变化。

解决方案:万能的new ArrayList。针对以上问题,均可以使用java.util包下面的ArrayList来解决,也就是使用ArrayList的构造函数,对切片集合进行一次包装。来看看源码,ArrayList的构造函数中能够看出,集合对源数据是拷贝的方式,而不是引用。

今天的课程讲解就到这,所以?你懂我意思吧?

相关推荐

Python第三课3. Python 的非正式介绍

3.Python的非正式介绍?在下面的例子中,通过提示符(>>>与...)的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每...

如何使用 Python 构建一个“谷歌搜索”系统?| 内附代码

来源|hackernoon编译|武明利,责编|Carol出品|AI科技大本营(ID:rgznai100)在这篇文章中,我将向您展示如何使用Python构建自己的答案查找系统。基本上,这...

Python 模拟微博登陆,亲测有效!(如何用python爬微博)

今天想做一个微博爬个人页面的工具,满足一些不可告人的秘密。那么首先就要做那件必做之事!模拟登陆……代码是参考了:https://www.douban.com/note/201767245/,我对代码进...

Python 驱动的 AI 艺术批量创作: 免费的Bing 绘图代码解析

这篇文章将深入分析一段Python代码,该代码利用Bing的AI绘图功能,即bing的images/create,根据用户提供的文本提示生成图像。我们将详细探讨其工作原理、代码结构、...

Python爬虫Scrapy库的使用入门?(python scrapy爬虫)

Scrapy是一个开源的并且支持高度可扩展的Python爬虫框架,主要被用来实现从网站提取数据。出现之初就是为网页抓取而设计,但是现在它也可以被用于从APIs中抓取数据或通用的Web抓取任务。Sc...

Python3 标准库概览(python标准库有什么)

操作系统接口os模块提供了不少与操作系统相关联的函数。>>>importos>>>os.getcwd()#返回当前的工作目录'C:\\Python34...

零基础入门学习Python(三):变量和字符串

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来的是...

Python读写docx文件(python读写word)

Python读写docx文件Python读写word文档有现成的库可以处理pipinstallpython-docx安装一下。https://python-docx.readthedocs.io/...

如何利用Xpath抓取京东网商品信息

前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~HTML文件其实就是由一组尖括号构成的标...

如何利用Xpath选择器抓取京东网商品信息

前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~HTML文件其实就是由一组尖括号构成的标...

python之Scrapy爬虫案例:豆瓣(python爬虫书籍豆瓣评分)

python模块之Scrapy爬虫框架...

Python编程入门学习:最常见加密方式和Python实现

前言我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。将字符串...

一日一技:Python中的string.rindex()方法

string.rindex()方法string.rindex()方法返回字符串内子字符串的最高索引(如果找到)。如果未找到子字符串,则会引发异常。rindex()的语法为:...

Asterisk-ARI对通道中的DTMF事件处理

Asterisk通道中关于DTMF处理是一个非常重要的功能。通过DTMF可以实现很多的业务处理。现在我们介绍一下关于ARI对通道中的DTMF处理,我们通过自动话务员实例来说明Asterisk如何创建一...

PyQt5 初次使用(pyqt5下载官网)

本篇文章默认已安装Python3,本篇文章默认使用虚拟环境。安装pipinstallPyQt5PyQt一些图形界面开发工具QtDesigner、国际化翻译工具Liguist需要另外...

取消回复欢迎 发表评论:

请填写验证码