集合就是用於儲存多個資料的容器。相對於具有相同功能的陣列來說,集合的長度可變會更加靈活方便。Java中提供了使用不同資料結構儲存資料的不同集合類,他們有各自不同的特點,並且在類中提供了很多常用了方法,便於我們使用。
集合主要有兩個頂層介面,Collection和Map。
List介面下的集合都會有以下特點:
建立物件
ArrayList list = new ArrayList<>();//不限定集合中存放元素的資料型別
ArrayList<集合元素的資料型別> list2 = new ArrayList<>();//限定集合中存放元素的資料型別
常用方法
方法 | 解釋 |
---|---|
boolean add(E e) | 新增元素,直接新增到集合的末尾 返回值代表是否新增成功 |
void add(int index, E element) | 往指定索引位置新增元素 |
boolean remove(Object o) | 刪除元素 |
E remove(int index) | 刪除指定索引位置的元素,返回值是被刪除的元素 |
E set(int index, E element) | 修改指定索引位置的元素 返回值為修改之前的元素值 |
E get(int index) | 獲取指定索引位置的元素 返回值為對應的元素 |
int size() | 獲取集合中元素的個數 |
boolean contains(Object o) | 判斷集合中是否存在某個元素 ,返回值代表是否存在 |
我們平時對集合用的最多的是add,remove,get,set,size這幾個方法。
遍歷
1.使用索引遍歷
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
結果:
2.使用迭代器遍歷
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
結果:
注意
:
為了避免並行修改異常(ConcurrentModificationException)的出現。避免在使用迭代器遍歷的過程中對集合進行操作。
3.使用foreach遍歷
foreach是java提供的一個語法。可以讓我們更方便的遍歷集合或陣列。
格式如下:
for(元素資料型別 變數名 : 遍歷的集合或者陣列){
//遍歷的時候會把遍歷到的元素賦值給我們上面定義的變數
}
例如:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
for (String s : list) {
System.out.println(s);
}
}
結果:
public static void main(String[] args) {
String[] arr = { "愚", "生", "淺", "末" };
for (String s : arr) {
System.out.println(s);
}
}
結果:
4.轉換為陣列遍歷
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
// 把list集合轉換為陣列 參數列 返回值型別 []
Object[] objects = list.toArray();
// 遍歷陣列
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
}
結果:
LinkedList list = new LinkedList<>();//不限定集合中存放元素的資料型別
LinkedList<集合元素的資料型別> list2 = new LinkedList<>();//限定集合中存放元素的資料型別
方法 | 解釋 |
---|---|
boolean add(E e) | 新增元素,直接新增到集合的末尾 返回值代表是否新增成功 |
void add(int index, E element) | 往指定索引位置新增元素 |
boolean remove(Object o) | 刪除元素 |
E remove(int index) | 刪除指定索引位置的元素,返回值是被刪除的元素 |
E set(int index, E element) | 修改指定索引位置的元素 返回值為修改之前的元素值 |
E get(int index) | 獲取指定索引位置的元素 返回值為對應的元素 |
int size() | 獲取集合中元素的個數 |
boolean contains(Object o) | 判斷集合中是否存在某個元素 ,返回值代表是否存在 |
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
//新增元素
list.add("生");
list.add(0,"愚");
//刪除元素
list.remove("生");
//修改元素
list.set(0,"愚生淺末");
//獲取元素
String s = list.get(0);
//獲取集合大小
int size = list.size();
//判斷元素是否存在
boolean flag = list.contains("愚生淺末");
}
我們發現上面這些方法其實和ArrayList中的常用方法都是相同的。因為LinkedList和ArrayList都是List介面的實現類,上面的很多方法都是他們共同的介面中定義的方法,所以都會有。
下面是LinkedList的一些特有方法:
方法 | 解釋 |
---|---|
void addFirst(E e) | 把元素新增到集合的最前面 |
void addLast(E e) | 把元素新增到集合的最後面 |
E removeFirst() | 刪除集合最前面的一個元素,返回值代表被刪除的元素 |
E removeLast() | 刪除集合最後面的一個元素,返回值代表被刪除的元素 |
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
list.addFirst("愷");
list.addLast("龍");
String s = list.removeFirst();
System.out.println(s);
String s1 = list.removeLast();
System.out.println(s1);
}
結果:
同ArrayList。
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("愚");
list.add("生");
list.add("淺");
list.add("末");
//遍歷集合
//for迴圈遍歷
// for (int i = 0; i < list.size(); i++) {
// System.out.println(list.get(i));
// }
//迭代器
// Iterator<String> it = list.iterator();
// while (it.hasNext()){
// String s = it.next();
// System.out.println(s);
// }
//foreach
// for(String s : list){
// System.out.println(s);
// }
//轉換為陣列遍歷
String[] strings = list.toArray(new String[0]);
for (int i = 0; i < strings.length; i++) {
System.out.println(strings[i]);
}
}
都是實現了List介面,不同點是底層儲存資料的資料結構不同。ArrayList底層是用陣列來儲存,而LinkedList是連結串列。所以各自的特點也和資料結構的特點一樣。
ArrayList : 查詢快,增刪慢
LinkedList: 增刪快,查詢慢
如圖片失效等情況,請參閱公眾號文章:https://mp.weixin.qq.com/s/JUMkP9T7scZulZmrOhRm2w
歡迎關注公眾號:愚生淺末,一起學習交流。