義烏網(wǎng)站建設制作商品牌策劃方案ppt
目錄
? ? ? ? 1.0 List 類的說明
? ? ? ? ?1.1 List 類的常用方法
? ? ? ? 1.2 List 集合的遍歷方式
? ? ? ? 2.0 ArrayList 集合的底層原理
? ? ? ?2.1 從?ArrayList 集合的底層原理來了解具有該特性的原因:
? ? ? ? ?2.2 ArrayList 集合的優(yōu)缺點
? ? ? ? 3.0 LinkedList 集合的底層原理
? ? ? ? 3.1?從 LinkedList?集合的底層原理來了解具有該特性的原因:
? ? ? ? 3.2 LinkedList?集合的優(yōu)缺點
? ? ? ? 3.3 LinkedList 集合的特有方法
? ? ? ? 1.0 List 類的說明
????????在 Java 中,List 類是 Java 集合框架中的一種接口,它是一種有序的、可重復的集合,用于存儲多個元素。List 接口是 Collection 接口的子接口,它定義了一系列方法來操作和訪問列表中的元素,所以 List 接口繼承了?Collection 接口的方法。
有關的?Collection 接口的常用 API 介紹在以下鏈接:
進階JAVA篇- Collection 類的常用的API與 Collection 集合的遍歷方式-CSDN博客
? ? ? ? ?1.1 List 類的常用方法
以代碼的形式來介紹這些方法:
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {//由于 List 是一個接口,不能直接去創(chuàng)建對象,//所以用 List 的實現(xiàn)類來創(chuàng)建一個對象,比如 ArrayListList<String> list = new ArrayList<>();//這是一行經(jīng)典的代碼!!!list.add("張三");list.add("李四");list.add("王五");System.out.println(list);//輸出結果為:[張三, 李四, 王五]//1. add(index, element):在指定位置插入一個元素。list.add(1,"張麻子");System.out.println(list);//輸出結果為:[張三, 張麻子, 李四, 王五]//2. remove(index):移除并返回指定位置的元素。list.remove(1);System.out.println(list);//輸出結果為:[張三, 李四, 王五]//3. set(index, element):將指定位置的元素替換為新的元素。list.set(1,"張麻子");System.out.println(list);//輸出結果為:[張三, 張麻子, 王五]//4. get(index):返回指定位置的元素。String a = list.get(1);System.out.println(a);//輸出結果為:張麻子} }
運行結果為:
? ? ? ? 1.2 List 集合的遍歷方式
? ? ? ? 除了 List 系列集合繼承 Collcetion類的三個遍歷方式之外,還支持普通的帶索引的?for 循環(huán)。
?有關的?Collection 類的三個遍歷方式的介紹在以下鏈接:
進階JAVA篇- Collection 類的常用的API與 Collection 集合的遍歷方式-CSDN博客
? ? ? ? 由于 List 系列集合支持支持有序的,所以可以使用普通帶索引的 for 循環(huán)。
代碼如下:
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {List<String> list = new ArrayList<>();//這是一行經(jīng)典的代碼!!!!list.add("張三");list.add("李四");list.add("王五");System.out.println(list);//用普通的 for 循環(huán)來遍歷以上集合for (int i = 0; i < list.size(); i++) {String a = list.get(i);System.out.println(a);}} }
運行結果如下:
????????
? ? ? ? 2.0 ArrayList 集合的底層原理
? ? ? ? 由于 ArrayList 是 List 的實現(xiàn)類,所以 ArrayList 特性與 List 接口是一致的,有序、可重復、有索引的特性。
? ? ? ?2.1 從?ArrayList 集合的底層原理來了解具有該特性的原因:
? ? ? ? ArrayList 集合是基于數(shù)組實現(xiàn)的,簡單來說,ArrayList 集合就是一個可變長度的數(shù)組。因此可以解釋為什么 ArrayList 集合具有有序、可重復、有索引的特性,是因為數(shù)組都具備這些特性。
? ? ? ? 創(chuàng)建的?ArrayList 集合的對象在底層的過程:
????????
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {//首先,利用無參構造器創(chuàng)建的集合,會在底層創(chuàng)建一個默認長度為0的數(shù)組List<String> list = new ArrayList<>();//這是一行經(jīng)典的代碼!!!!//當添加第一個元素的時候,會創(chuàng)建一個新的默認長度為10的數(shù)組list.add("a");} }
????????需要注意的是:
????????1. 假如數(shù)組存滿的時候會創(chuàng)建一個新的已擴容1.5倍的數(shù)組,然后將原來舊的數(shù)組里面的數(shù)據(jù),遷移到新的已擴容的數(shù)組中來。
? ? ? ? 2. 如果一次添加多個元素,1.5倍還是放不下,則新創(chuàng)建數(shù)組的長度以實際為準。
? ? ? ? ?2.2 ArrayList 集合的優(yōu)缺點
? ? ? ? 因為 ArrayList 是基于數(shù)組實現(xiàn)的,所以可以根據(jù)數(shù)組的特性來了解該集合的優(yōu)缺點,由于數(shù)組是支持索引查找元素的,所以該集合的優(yōu)點是很明顯,查找元素特別的快。但是對于增添、刪除、修改的操作來說是很慢的。
? ? ? ? 所以 ArrayList 適合:根據(jù)索引查詢數(shù)據(jù)。不適合:頻繁對元素進行操作。
? ? ? ? 3.0 LinkedList 集合的底層原理
????????由于 LinkedList 是 List 的實現(xiàn)類,所以 LinkedList 特性與 List 接口是一致的,有序、可重復、有索引的特性,但是與 ArrayList 在底層的原理是不一樣的。
? ? ? ? 3.1?從 LinkedList?集合的底層原理來了解具有該特性的原因:
????????LinkedList 集合是基于雙鏈表實現(xiàn)的。
簡答介紹以下雙鏈表:
? ? ? ? 鏈表中的每一個節(jié)點都是獨立的對象,也就是說內(nèi)存不是連續(xù)的,每一個節(jié)點都包含記錄上一個節(jié)點的地址還有下一個節(jié)點的地址、數(shù)值。
? ? ? ? 3.2 LinkedList?集合的優(yōu)缺點
? ? ? ? 根據(jù)該集合的數(shù)據(jù)結構為雙鏈表,每查詢一個元素是從頭或者尾一步一步地去查詢的,而不能直接去找到其中的元素,所以查詢是很慢的。對于增加、刪除、修改元素的速度相對來說是快的。但是有兩個節(jié)點很特殊,對于頭、尾節(jié)點無論查詢還是增加、刪除、修改元素速度都很快的。
? ? ? ? 所以 LinkedList 集合適合:頻繁對元素操作的。不合適:大量的查找元素。
? ? ? ? 3.3 LinkedList 集合的特有方法
以代碼的形式來介紹:
import java.util.LinkedList; public class Text_LinkedList {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("張三");list.add("李四");list.add("王五");System.out.println(list);//輸出結果為:[張三, 李四, 王五]//1. addFirst() :在該列表開頭插入指定的元素list.addFirst("王麻子");System.out.println(list);//輸出結果為:[王麻子, 張三, 李四, 王五]//2. addLast() :將指定的元素追加到此列表的末尾list.addLast("張麻子");System.out.println(list);//輸出結果為:[王麻子, 張三, 李四, 王五, 張麻子]//3. getFirst() :返回此列表中的第一個元素String a = list.getFirst();System.out.println(a);//輸出結果為:王麻子//4. getLast() :返回此列表中的最后一個元素String b = list.getLast();System.out.println(b);//輸出結果為:張麻子//5. removeFirst() :從此列表中刪除并返回第一個元素list.removeFirst();System.out.println(list);//輸出結果為:[張三, 李四, 王五, 張麻子]//6. removeLast() :從此列表中刪除并返回最后一個元素list.removeLast();System.out.println(list);//輸出結果為:[張三, 李四, 王五]} }
運行結果如下:
? ? ? ? 根據(jù) LinkedList 集合的數(shù)據(jù)結構的特性,其應用場景可以是用設計隊列(先進先出,后進后出),還可以用來設計棧(先進后出,后進先出)。