subList生成的列表和原列表的对比
2019独角兽企业重金招聘Python工程师标准>>>
在List类里面有一个方法是subList方法可以生成原表的视图,那么这个视图和原表有什么关系呢?下面我们就来试试。
首先我们定义一个包含两个字符串的列表list1,并加两个元素到list1,再构造一个包含list1的列表list2,然后列表list3是通过subList方法从list1中截取所有的元素产生的列表,然后我们对list3进行添加一个元素的操作,然后看一下list1和list2以及list1和list3究竟是不是相等的(可以看下另外一篇ArrayList和Vector的相等判断,只要都是List类下的子类,那么元素相等就相等),然后再打印下各个list的值。大家猜猜结果会是什么呢?
结果是list1和list3是相等的,list1里面的元素也被修改了。那么这是为什么呢?我们来看下subList的源码。
subList方法是有AbstractList实现的,会根据是不是可以随机存取来提供不同的subList实现方式,不过RandomAccessSubList也是SubList的子类,所有的操作都是通过SubList类实现的(除了自身的SubList方法外,大家可以看下RandomAccessSubList类,这里就不贴出来了),现在我们来看下SubList的源码(直接看add方法以及构造函数)。
构造函数前面还定义了两个private属性:
private AbstractList<E> l;
private int offset;
调用subList方法的时候,返回的SubList类也是AbstractList的子类,里面的所有方法(这里只贴出了add方法,还有remove,set,get方法)都是对原始列表的操作(构造函数里里面将传进来的list1给l,add方法中再对l进行操作),也就是说通过subList方法生成的列表只是原表的一个视图而已。所以两表的元素还是会保持一致的。所以大家在操作subList产生的表的时候要注意是会对原表产生影响的。附上API中subList的方法说明:
转载于:https://my.oschina.net/u/2391658/blog/861750
subList生成的列表和原列表的对比相关推荐
- 子列表只是原列表的一个视图
原文参考:<编写高质量代码:改善java程序的151个建议> 本文原创:穆雄雄 上期文章: subList?? subString??? 上期我们说到,List接口提供了subList方法 ...
- 注意!在subList生成子列表之后,一定不要随便更改原列表
大家好,我是雄雄. 前几期我们说过,subList方法是返回原列表的子列表,并且我们还说过,在subList返回的子列表上操作时,会直接影响着原列表,原文在这里: subList?? subStrin ...
- python列表乘法运算_Python列表基本运算和元组
成员运算符 in 我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表.这是一个布尔表达式,如果元素在列表中,结果为布尔值 True,反之为 F ...
- 汇编语言-怎样查看标志位、怎样生成列表文件、列表文件格式
2019/10/11 加法减法,标志位: ;加法减法 .386 .model flat,stdcall .stack 4096 ExitProcess proto,dwExitCode:dword . ...
- python 只取数值_Python:你会生成列表吗?-- 列表生成式
当有人问你:"你会用 Python 生成列表吗?" 我想你一定会说:"当然会啊,这有什么难的." 那人再问:"那你会列表生成式吗?" 你:& ...
- python随机生成列表_python 实现快速生成连续、随机字母列表
0.摘要 本文介绍了生成连续和随机字母表的方法,用于快速生成大量字母数据. 主要使用chr()函数,将数字通过ASCII表转换为相应字母. 1.chr() 函数 chr() 用一个范围在 range( ...
- 把列表中的0全部移到后面,非零元素出现的顺序不变,要求在原列表上进行.
#把列表中的0全部移到后面,非零元素出现的顺序不变,要求在原列表上进行. lst1 = [0, 0, 0, 0, 18754, 0, 0, 0, 0, 0, 0, 13, 1, 0, 1, 5, 0, ...
- Python编写程序,生成包含20个随机数列表,然后将前十个元素升序排列,后十个元素降序排列,并输出结果。
编写程序,生成包含20个随机数列表,然后将前十个元素升序排列,后十个元素降序排列,并输出结果. import random listone=[random.randint(0,100) for i i ...
- python列表、字典text:用户输入整数n,生成长度为n的列表,将n个随机数放入列表中
1.用户输入整数n,生成长度为N的列表,将n个随机的奇数放入列表中 #导入随机数模块 import random #input录入str 需转为int enter = int(input('请输入一个 ...
最新文章
- ZendServer下安装Typecho需要注意问题
- stm32f103c8t6掉坑记
- 数据结构与算法 -- 链表
- oracle查询使用or,查询视图,使用or就用不上索引
- 1010. 一元多项式求导
- 自我学习的技巧和建议
- mysql数据库备份心得
- luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论
- python数据分类聚类案例_Python实现的KMeans聚类算法实例分析
- python批量导入网页信息_python批量导入数据进Elasticsearch的实例
- 校验json格式_接口的登录状态校验以及JWT
- Julia : WinRPM error -----待确定
- 12v电量显示制作方法_12V电池电量指示电路
- linux中怎么连接wifi密码,Linux终端中连接WiFi的方法
- 软件是用计算机解决问题,电脑常见的软件问题及解决方法
- 微信小程序:购物车总结(商品左右联动)
- 电脑上xml文件怎么打开,xml文件如何在电脑上打开
- esp寄存器与ebp寄存器介绍
- 蓝牙单火开关(天猫精灵生态)方案
- ANSYS Workbench中多场耦合下不同模块间的信息共享设置
热门文章
- GitLab 安装笔记
- java.io.EOFException: Chunk stream does not exist at page: 0
- 谭浩强C语言程序设计 学习辅导练习题
- 最优子结构(Optimal Substructure)
- 当装了两个tomcat后,如何修改tomcat端口
- FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul
- android AsyncTask介绍(转)
- window.open和window.showModalDialog用法
- android 生命周期 Activity/Fragment lifecycle
- Unity3D 中的程序后台运行