java修改list中对象的值_Java中List集合的一点总结
為什么要用接口引用指向實現類的對象?
這種寫法其實java多態的表現形式
多態的定義:
指允許不同類的對象對同一消息做出響應。
即同一消息可以根據發送對象的不同而采用多種不同的行為方式。
(發送消息就是函數調用
List list;是在棧區開辟一個空間放list引用,并沒有創建對象所以不知道ArrayList還是LinkedList
當你list= new ArrayList(); 就創建了ArrayList對象。
并且把開始創建的list引用指向這個對象ArrayList和LinkedList都是List的實現類。
為什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
?
問題就在于List有多個實現類,如 LinkedList或者Vector等等,現在你用的是ArrayList,
也許哪一天你需要換成其它的實現類呢?,這時你只要改變這一行就行了:
List list = new LinkedList(); 其它使用了list地方的代碼根本不需要改動。
假設你開始用 ArrayList alist = new ArrayList(),
這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。
,如果沒有特別需求的話,最好使用List list = new LinkedList(); ,便于程序代碼的重構.
這就是面向接口編程的好處
注意事項
list只能使ArrayList中已經實現了的List接口中的方法
,ArrayList中那些自己的、沒有在List接口定義的方法是不可以被訪問到的
list.add()
其實是List接口的方法
但是調用ArrayList的方法如 clone()方法是調用不到的
ArrayList源碼分析:
1.add(int index ,Object obj):首先判斷是否越界?數組拷貝的原理;把index 拷貝到index+1,size-1
是拷貝長度,將元素添加到索引為index的位置上,元素的個數+1
2.get(int index):根據索引獲取元素對象,調用elementDate(index)方法:在Object類型的數組中
根據索引取出元素對象
3.size():每次添加size+1
4.isEmpty():判斷元素是否一個沒有返回布爾類型的值
5.set(int index):在指定索引位置修改我們對象:調用elementDate(index)方法:根據索引把元素調出
再設置新的元素到index位置,返回一個old元素后 設置成功
6.remove(int index):調用elementDate(index)方法:獲取元素,size-index-1?
7.clear():循環設置元素位置為null然后長度size設為0
8.iterator!!!
LinkedList:鏈表
Vector:創建的時候初始化容量就是10 和ArrayList的底層結構相同都是Object類型的數組,ArrayList
在add元素的時候才會初始化容量 擴容方式 Arrays擴容每次0.5倍 Vector每次擴容1倍
ArraysList線程非同步(jdk1.2)是Vector(jdk1.0)安全性高線程同步的優化
總結
以上是生活随笔為你收集整理的java修改list中对象的值_Java中List集合的一点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php教程目录,php基础入门篇-文件和
- 下一篇: java字符的输入流_Java:字节流和