List - 線性表
- List 常用方法
- 增
- boolean add(E e) — 尾插 e
- void add(int index,E element) — 將 e 插入到 index 位置
- boolean addAll(Collection<? extends E> c) — 尾插 c 中的元素
- boolean addAll(int index, Collection<? extends E> c) — 指定位置插入 c 中的元素
- 刪
- E remove(int index) — 洗掉 index 位置元素
- boolean remove(Object o) — 洗掉遇到的第一個元素 o
- void clear() — 清空
- 改
- E set(int index,E element) 將下標 index 位置元素設定為 element
- 查
- E get(int index) — 獲取下標 index 位置元素
- int indexOf(Object o) — 回傳第一個 o 所在下標
- int lastIndexOf(Object o) — 回傳最后一個 o 的下標
- 補充
- boolean contains(Object o) — 判斷 o 是否在線性表中
- int size( ) — 獲取集合中有多少個元素
- boolean isEmpty( ) — 判斷集合是否為空
- 使用 subList 獲取子序列
- foreach 訪問每個元素
- 傳統 for回圈 訪問每個元素
- 使用構造方法構造出新的 List 物件
總覽:

List 介面繼承于Collection介面
List 特指:線性表這一類資料結構,而List的典型實作有:Vector,ArrayList 和 LinkedList三個
其中 Vector 和 ArrayList 表示順序表,而 LinkedList 表示鏈表
List 常用方法
增
boolean add(E e) — 尾插 e
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
}

void add(int index,E element) — 將 e 插入到 index 位置
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add(1,"Yolo!");
}

boolean addAll(Collection<? extends E> c) — 尾插 c 中的元素
將指定集合中的所有物件添加到該集合中, c 表示是要添加到該串列中的元素的集合
? 表示通配符,extends E,表示插入的元素必須是 E 或 其子類
List<String> list = new ArrayList<>();
Collection<String> collection = new ArrayList<>();
collection.add("Hello");
collection.add("World");
list.addAll(collection);
輸出結果:

boolean addAll(int index, Collection<? extends E> c) — 指定位置插入 c 中的元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add(1,"Yolo");
Collection<String> collection = new ArrayList<>();
collection.add("Hello");
collection.add("World");
list.addAll(0,collection);
System.out.println(list);
}
輸出結果:

刪
E remove(int index) — 洗掉 index 位置元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add(1,"Yolo");
list.remove(0);
System.out.println(list);
}
輸出結果:

boolean remove(Object o) — 洗掉遇到的第一個元素 o
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
list.remove("Yolo");
System.out.println(list);
}
輸出結果:

void clear() — 清空
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
System.out.println("清空前:" + list);
list.clear();
System.out.println("清空后:" + list);
}
輸出結果:

改
E set(int index,E element) 將下標 index 位置元素設定為 element
此處注意,下標不能越界
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println("修改前:" + list);
list.set(1,"Codeing");
System.out.println("修改后:" + list);
}
輸出結果:

查
E get(int index) — 獲取下標 index 位置元素
此處注意,下標不能越界
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
System.out.println(list.get(0));
}
int indexOf(Object o) — 回傳第一個 o 所在下標
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list)
int index = list.indexOf("Yolo");
System.out.println("第一個Yolo所在下標:" + index);
}
輸出結果:

int lastIndexOf(Object o) — 回傳最后一個 o 的下標
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
int lastIndex = list.lastIndexOf("Yolo");
System.out.println("最后一個Yolo所在下標:" + lastIndex);
}
輸出結果:

補充
boolean contains(Object o) — 判斷 o 是否在線性表中
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
System.out.println(list.contains("Java"));
}
輸出結果:

int size( ) — 獲取集合中有多少個元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
System.out.println(list.size());
}
輸出結果:3
boolean isEmpty( ) — 判斷集合是否為空
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
System.out.println(list.isEmpty());
list.clear();
System.out.println(list.isEmpty());
}
輸出結果:

使用 subList 獲取子序列
原型:List subList(int fromIndex,int toIndex) — 截取部分 list
.
包含下標為 fraoIndex的元素,不包含下標為toIndex的元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
System.out.println(list.subList(0, 2));
}
輸出結果:

foreach 訪問每個元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
for(String s : list){
System.out.println(s);
}
}
輸出結果:

傳統 for回圈 訪問每個元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Yolo");
list.add("Java");
list.add(2,"Yolo");
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
輸出結果:

使用構造方法構造出新的 List 物件
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Cpp");
list.add("Java");
list.add("Python");
list.add("C#");
System.out.println(list);
//拷貝一份 list,即:將list拷貝一份給list2
List<String> list2 = new ArrayList<>(list);
System.out.println(list2);
}
思考: 此處為深拷貝還是淺拷貝?
首先,想到的就是 修改 list 的元素,查看 list2 中是否發生改變
List<String> list2 = new ArrayList<>(list);
System.out.println("拷貝了一份list:");
System.out.println(list2);
list.set(0,"PHP");
System.out.println(list2);
在此處,并不可行,因為在Java中,String類是不可變的
驗證是否為深拷貝
需要給 list 泛型引數填一個可變物件的型別才可以,此處也可使用StringBulider
注意:
set 和 get,對于 LinkedList 和 ArrayList均有效
若是ArrayList隨機訪問比較高效,若是LinkedList這樣的操作比較低效

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303578.html
標籤:java
上一篇:Java陣列超詳解
下一篇:cgb2108-day02
