Java容器學習——List
Java容器學習——List
基礎知識
陣列:
優點:隨機存取,可以快速訪問元素
缺點:靜態分配記憶體,存在空間閒置或者溢位現象;不適合進行插入和刪除操作,需要移動大量元素。
連結串列:
優點:動態分配記憶體,不浪費同時也夠用;對於大量元素的插入、刪除操作連結串列優勢十分明顯。
缺點:不能隨機訪問元素,得從頭到尾遍歷。
學科聯絡
聯想c語言資料結構線性表:順序表採用的一組地址連續的儲存單元依次儲存元素,可以看成一個靜態的陣列;而連結串列是用一組任意儲存單元儲存資料元素(這組單元可連續也可不連續),動態分配記憶體空間。
Java中的列表它們是動態分配記憶體的,與c語言中的順序表不同的是ArryList是動態分配記憶體的,大小會隨著元素的增多而變大。LinkedList對應連結串列
ArrayList和LinkedList區別
- ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。
- 對於隨機訪問元素,ArrayList優於LinkedList。
- 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。
注:兩者雖有區別,但都能實現一樣的功能,在實際開發中,ArrayList用的比較多。
對List的常用操作
- add() 新增元素
- remove() 刪除元素
- size() 列表的大小(列表中裝有多少個元素)
- get(i) 從列表中獲取某個元素,列表的下標也是從0開始
- contains()判斷容器是否含有XXX東西
注:List在 java包中
更多操作請檢視API文件
【參考程式碼】
package Collection; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class TestList { public static void main(String[] args) { List list = new ArrayList(); // 換成Linkedist 下面的操作都能一樣實現 list.add("小明"); list.add("小紅"); list.add("小藍"); list.add("小綠"); list.add("小明"); System.out.println(list);//[小明, 小紅, 小藍, 小綠, 小明] list.remove("小藍"); System.out.println(list);// [小明, 小紅, 小綠, 小明] // 用Object類來接(預設) Object obj = list.get(1); String s = (String) obj; //由於原來的資料是String類,使用使要把Object類向下轉型(強轉)為String類 System.out.println(s);// 小紅 System.out.println(list.size());// 計算列表的大小(長度):4 System.out.println(list.contains("小藍"));//判斷列表中是否有xxx false // 遍歷列表 for (int i = 0; i < list.size(); i++) { String str = (String)list.get(i); //從列表裡邊拿資料,向下轉型,強轉 System.out.println(str); // System.out.println(list.get(i)); } } }
注:
列表或者容器為了它的通用性(為了把所有東西能裝它裡面),任何東西扔到裡面是都會被向上轉型為Object類:在Java中Object類是所有類的的根,Object是Java中統一的一種資料型別,所有的類都能繼承它。
放進去的是Object類,自然我拿出出來時也是Object類,但當初的資料型別不一定是Object類,我們想使用的是它原來的型別
我們喜歡的是那個本質的它!因此想從列表裡拿資料,那就要轉為原來的資料型別——向下轉型,強制轉化!
總結
相比與大一下學期的c語言資料結構,Java中列表操作更加的靈活便捷,具體的新增、刪除、獲取元素等等操作都有具體的方法來實現了,而且ArrayList還是動態分配記憶體的,簡直太強了!
以上是我對剛剛學到的Java容器中List知識的一些個人總結與感悟,最後,感謝各位大佬們看到了這裡!願你韶華不負,青春無悔!
注: 由於自己剛剛開始學習Java不久,語言文字描述、技術等各方面還不是很好,如果文章有任何錯誤和建議,請各位大佬盡情評論留言!如果這篇文章對你有些許幫助,希望可愛親切的您點個贊推薦一手,非常感謝啦!