1.Collection集合
1.1陣列和集合的區別
相同點
都是容器,可以儲存多個資料
不同點
- 陣列的長度是不可變的,集合的長度是可變的
陣列可以存基本資料型別和引用資料型別
集合只能存引用資料型別,如果要存基本資料型別,需要存對應的包裝類
1.2集合類體系結構
1.3Collection 集合概述和使用
Collection集合概述
- 是單例集合的頂層介面,它表示一組物件,這些物件也稱為Collection的元素
- JDK 不提供此介面的任何直接實現.它提供更具體的子介面(如Set和List)實現
建立Collection集合的物件
- 多型的方式
- 具體的實現類ArrayList
Collection集合常用方法
方法名 說明 boolean add(E e) 新增元素 boolean remove(Object o) 從集合中移除指定的元素 boolean removeIf(Object o) 根據條件進行移除 void clear() 清空集合中的元素 boolean contains(Object o) 判斷集合中是否存在指定的元素 boolean isEmpty() 判斷集合是否為空 int size() 集合的長度,也就是集合中元素的個數
1.4Collection集合的遍歷
迭代器介紹
- 迭代器,集合的專用遍歷方式
- Iterator<E> iterator(): 返回此集合中元素的迭代器,透過集合物件的iterator()方法得到
Iterator中的常用方法
boolean hasNext(): 判斷當前位置是否有元素可以被取出
E next(): 獲取當前位置的元素,將迭代器物件移向下一個索引位置Collection集合的遍歷
public class IteratorDemo1 { public static void main(String[] args) { //建立集合物件 Collection<String> c = new ArrayList<>(); //新增元素 c.add("hello"); c.add("world"); c.add("java"); c.add("javaee"); //Iterator<E> iterator():返回此集合中元素的迭代器,透過集合的iterator()方法得到 Iterator<String> it = c.iterator(); //用while迴圈改進元素的判斷和獲取 while (it.hasNext()) { String s = it.next(); System.out.println(s); } } }
迭代器中刪除的方法
void remove(): 刪除迭代器物件當前指向的元素
public class IteratorDemo2 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); Iterator<String> it = list.iterator(); while(it.hasNext()){ String s = it.next(); if("b".equals(s)){ //指向誰,那麼此時就刪除誰. it.remove(); } } System.out.println(list); } }
1.5增強for迴圈
介紹
- 它是JDK5之後出現的,其內部原理是一個Iterator迭代器
- 實現Iterable介面的類才可以使用迭代器和增強for
- 簡化陣列和Collection集合的遍歷
格式
for(集合/陣列中元素的資料型別 變數名 : 集合/陣列名) {
// 已經將當前遍歷到的元素封裝到變數中了,直接使用變數即可
}
程式碼
public class MyCollectonDemo1 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); //1,資料型別一定是集合或者陣列中元素的型別 //2,str僅僅是一個變數名而已,在迴圈的過程中,依次表示集合或者陣列中的每一個元素 //3,list就是要遍歷的集合或者陣列 for(String str : list){ System.out.println(str); } } }
2.List集合
2.1List集合的概述和特點
List集合的概述
- 有序集合,這裡的有序指的是存取順序
- 使用者可以精確控制列表中每個元素的插入位置,使用者可以透過整數索引訪問元素,並搜尋列表中的元素
- 與Set集合不同,列表通常允許重複的元素
List集合的特點
- 存取有序
- 可以重複
- 有索引
2.2List集合的特有方法
方法介紹
方法名 描述 void add(int index,E element) 在此集合中的指定位置插入指定的元素 E remove(int index) 刪除指定索引處的元素,返回被刪除的元素 E set(int index,E element) 修改指定索引處的元素,返回被修改的元素 E get(int index) 返回指定索引處的元素 示例程式碼
public class MyListDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); //method1(list); //method2(list); //method3(list); //method4(list); } private static void method4(List<String> list) { // E get(int index) 返回指定索引處的元素 String s = list.get(0); System.out.println(s); } private static void method3(List<String> list) { // E set(int index,E element) 修改指定索引處的元素,返回被修改的元素 //被替換的那個元素,在集合中就不存在了. String result = list.set(0, "qqq"); System.out.println(result); System.out.println(list); } private static void method2(List<String> list) { // E remove(int index) 刪除指定索引處的元素,返回被刪除的元素 //在List集合中有兩個刪除的方法 //第一個 刪除指定的元素,返回值表示當前元素是否刪除成功 //第二個 刪除指定索引的元素,返回值表示實際刪除的元素 String s = list.remove(0); System.out.println(s); System.out.println(list); } private static void method1(List<String> list) { // void add(int index,E element) 在此集合中的指定位置插入指定的元素 //原來位置上的元素往後挪一個索引. list.add(0,"qqq"); System.out.println(list); } }
3.資料結構
3.1資料結構之棧和佇列
棧結構
先進後出
佇列結構
先進先出
3.2資料結構之陣列和連結串列
陣列結構
查詢快、增刪慢
佇列結構
查詢慢、增刪快
4.List集合的實現類
4.1List集合子類的特點
ArrayList集合
底層是陣列結構實現,查詢快、增刪慢
LinkedList集合
底層是連結串列結構實現,查詢慢、增刪快
4.2LinkedList集合的特有功能
特有方法
方法名 說明 public void addFirst(E e) 在該列表開頭插入指定的元素 public void addLast(E e) 將指定的元素追加到此列表的末尾 public E getFirst() 返回此列表中的第一個元素 public E getLast() 返回此列表中的最後一個元素 public E removeFirst() 從此列表中刪除並返回第一個元素 public E removeLast() 從此列表中刪除並返回最後一個元素 示例程式碼
public class MyLinkedListDemo4 { public static void main(String[] args) { LinkedList<String> list = new LinkedList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); // public void addFirst(E e) 在該列表開頭插入指定的元素 //method1(list); // public void addLast(E e) 將指定的元素追加到此列表的末尾 //method2(list); // public E getFirst() 返回此列表中的第一個元素 // public E getLast() 返回此列表中的最後一個元素 //method3(list); // public E removeFirst() 從此列表中刪除並返回第一個元素 // public E removeLast() 從此列表中刪除並返回最後一個元素 //method4(list); } private static void method4(LinkedList<String> list) { String first = list.removeFirst(); System.out.println(first); String last = list.removeLast(); System.out.println(last); System.out.println(list); } private static void method3(LinkedList<String> list) { String first = list.getFirst(); String last = list.getLast(); System.out.println(first); System.out.println(last); } private static void method2(LinkedList<String> list) { list.addLast("www"); System.out.println(list); } private static void method1(LinkedList<String> list) { list.addFirst("qqq"); System.out.println(list); } }