欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

subList生成的列表和原列表的对比

发布时间:2024/4/17 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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生成的列表和原列表的对比的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。