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生成的列表和原列表的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 衔接上一学期:排球积分规则
- 下一篇: 设置MySQL的字符编码