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生成的列表和原列表的对比相关推荐

  1. 子列表只是原列表的一个视图

    原文参考:<编写高质量代码:改善java程序的151个建议> 本文原创:穆雄雄 上期文章: subList?? subString??? 上期我们说到,List接口提供了subList方法 ...

  2. 注意!在subList生成子列表之后,一定不要随便更改原列表

    大家好,我是雄雄. 前几期我们说过,subList方法是返回原列表的子列表,并且我们还说过,在subList返回的子列表上操作时,会直接影响着原列表,原文在这里: subList?? subStrin ...

  3. python列表乘法运算_Python列表基本运算和元组

    成员运算符 in 我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表.这是一个布尔表达式,如果元素在列表中,结果为布尔值 True,反之为 F ...

  4. 汇编语言-怎样查看标志位、怎样生成列表文件、列表文件格式

    2019/10/11 加法减法,标志位: ;加法减法 .386 .model flat,stdcall .stack 4096 ExitProcess proto,dwExitCode:dword . ...

  5. python 只取数值_Python:你会生成列表吗?-- 列表生成式

    当有人问你:"你会用 Python 生成列表吗?" 我想你一定会说:"当然会啊,这有什么难的." 那人再问:"那你会列表生成式吗?" 你:& ...

  6. python随机生成列表_python 实现快速生成连续、随机字母列表

    0.摘要 本文介绍了生成连续和随机字母表的方法,用于快速生成大量字母数据. 主要使用chr()函数,将数字通过ASCII表转换为相应字母. 1.chr() 函数 chr() 用一个范围在 range( ...

  7. 把列表中的0全部移到后面,非零元素出现的顺序不变,要求在原列表上进行.

    #把列表中的0全部移到后面,非零元素出现的顺序不变,要求在原列表上进行. lst1 = [0, 0, 0, 0, 18754, 0, 0, 0, 0, 0, 0, 13, 1, 0, 1, 5, 0, ...

  8. Python编写程序,生成包含20个随机数列表,然后将前十个元素升序排列,后十个元素降序排列,并输出结果。

    编写程序,生成包含20个随机数列表,然后将前十个元素升序排列,后十个元素降序排列,并输出结果. import random listone=[random.randint(0,100) for i i ...

  9. python列表、字典text:用户输入整数n,生成长度为n的列表,将n个随机数放入列表中

    1.用户输入整数n,生成长度为N的列表,将n个随机的奇数放入列表中 #导入随机数模块 import random #input录入str 需转为int enter = int(input('请输入一个 ...

最新文章

  1. ZendServer下安装Typecho需要注意问题
  2. stm32f103c8t6掉坑记
  3. 数据结构与算法 -- 链表
  4. oracle查询使用or,查询视图,使用or就用不上索引
  5. 1010. 一元多项式求导
  6. 自我学习的技巧和建议
  7. mysql数据库备份心得
  8. luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论
  9. python数据分类聚类案例_Python实现的KMeans聚类算法实例分析
  10. python批量导入网页信息_python批量导入数据进Elasticsearch的实例
  11. 校验json格式_接口的登录状态校验以及JWT
  12. Julia : WinRPM error -----待确定
  13. 12v电量显示制作方法_12V电池电量指示电路
  14. linux中怎么连接wifi密码,Linux终端中连接WiFi的方法
  15. 软件是用计算机解决问题,电脑常见的软件问题及解决方法
  16. 微信小程序:购物车总结(商品左右联动)
  17. 电脑上xml文件怎么打开,xml文件如何在电脑上打开
  18. esp寄存器与ebp寄存器介绍
  19. 蓝牙单火开关(天猫精灵生态)方案
  20. ANSYS Workbench中多场耦合下不同模块间的信息共享设置

热门文章

  1. GitLab 安装笔记
  2. java.io.EOFException: Chunk stream does not exist at page: 0
  3. 谭浩强C语言程序设计 学习辅导练习题
  4. 最优子结构(Optimal Substructure)
  5. 当装了两个tomcat后,如何修改tomcat端口
  6. FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul
  7. android AsyncTask介绍(转)
  8. window.open和window.showModalDialog用法
  9. android 生命周期 Activity/Fragment lifecycle
  10. Unity3D 中的程序后台运行