List接口
我們掌握了Collection接口的使用後,再來看看Collection接口中的子類,他們都具備那些特性呢?接下來,我們一起學習Collection中的常用幾個子類(java.util.List集合、java.util.Set集合)。
List接口介紹
java.util.List接口繼承自Collection接口,是單列集合的一個重要分支,習慣性地會將實現了List接口的對象稱為List集合。在List集合中允許出現重複的元素,所有的元素是以一種線性方式進行存儲的,在程序中可以通過索引來訪問集合中的指定元素。另外,List集合還有一個特點就是元素有序,即元素的存入順序和取出順序一致。
看完API,我們總結一下:
List接口特點:
它是一個元素存取有序的集合。例如,存元素的順序是11、22、33。那麼集合中,元素的存儲就是按照11、22、33的順序完成的)。它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與數組的索引是一個道理)。集合中可以有重複的元素,通過元素的equals方法,來比較是否為重複的元素。tips:我們在基礎班的時候已經學習過List接口的子類java.util.ArrayList類,該類中的方法都是來自List中定義。
List接口中常用方法
List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據元素索引來操作集合的特有方法,如下:
public void add(int index, E element): 將指定的元素,添加到該集合中的指定位置上。public E get(int index):返回集合中指定位置的元素。public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。public E set(int index, E element):用指定元素替換集合中指定位置的元素,返回值的更新前的元素。List集合特有的方法都是跟索引相關,我們在基礎班都學習過。
tips:我們之前學習Colletion體系的時候,發現List集合下有很多集合,它們的存儲結構不同,這樣就導致了這些集合它們有各自的特點,供我們在不同的環境下使用,那麼常見的數據結構有哪些呢?在下一章我們來介紹:
ArrayList集合
java.util.ArrayList集合數據存儲的結構是數組結構。元素增刪慢,查找快,由於日常開發中使用最多的功能為查詢數據、遍歷數據,所以ArrayList是最常用的集合。
許多程式設計師開發時非常隨意地使用ArrayList完成任何需求,並不嚴謹,這種用法是不提倡的。
LinkedList集合
java.util.LinkedList集合數據存儲的結構是鍊表結構。方便元素添加、刪除的集合。
LinkedList是一個雙向鍊表,那麼雙向鍊表是什麼樣子的呢,我們用個圖了解下
實際開發中對一個集合元素的添加與刪除經常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。這些方法我們作為了解即可:
public void addFirst(E e):將指定元素插入此列表的開頭。public void addLast(E e):將指定元素添加到此列表的結尾。public E getFirst():返回此列表的第一個元素。public E getLast():返回此列表的最後一個元素。public E removeFirst():移除並返回此列表的第一個元素。public E removeLast():移除並返回此列表的最後一個元素。public E pop():從此列表所表示的堆棧處彈出一個元素。public void push(E e):將元素推入此列表所表示的堆棧。public boolean isEmpty():如果列表不包含元素,則返回true。LinkedList是List的子類,List中的方法LinkedList都是可以使用,這裡就不做詳細介紹,我們只需要了解LinkedList的特有方法即可。在開發時,LinkedList集合也可以作為堆棧,隊列的結構使用。
public class Demo04LinkedList {public static void main(String[] args) {method4();}/* * void push(E e): 壓入。把元素添加到集合的第一個位置。 * E pop(): 彈出。把第一個元素刪除,然後返回這個元素。 */public static void method4() { //創建LinkedList對象 LinkedList<String> list = new LinkedList<>(); //添加元素 list.add("達爾文"); list.add("達文西"); list.add("達爾優"); System.out.println("list:" + list); //調用push在集合的第一個位置添加元素 //list.push("愛迪生"); //System.out.println("list:" + list);//[愛迪生, 達爾文, 達文西, 達爾優] //E pop(): 彈出。把第一個元素刪除,然後返回這個元素。 String value = list.pop(); System.out.println("value:" + value);//達爾文 System.out.println("list:" + list);//[達文西,達爾優]}/* * E removeFirst():刪除第一個元素 * E removeLast():刪除最後一個元素。 */public static void method3() { //創建LinkedList對象 LinkedList<String> list = new LinkedList<>(); //添加元素 list.add("達爾文"); list.add("達文西"); list.add("達爾優"); //刪除集合的第一個元素// String value = list.removeFirst();// System.out.println("value:" + value);//達爾文// System.out.println("list:" + list);//[達文西,達爾優] //刪除最後一個元素 String value = list.removeLast(); System.out.println("value:" + value);//達爾優 System.out.println("list:" + list);//[達爾文, 達文西]}/* * E getFirst(): 獲取集合中的第一個元素 * E getLast(): 獲取集合中的最後一個元素 */public static void method2() { //創建LinkedList對象 LinkedList<String> list = new LinkedList<>(); //添加元素 list.add("達爾文"); list.add("達文西"); list.add("達爾優"); System.out.println("list:" + list); //獲取集合中的第一個元素 System.out.println("第一個元素是:" + list.getFirst()); //獲取集合中的最後一個元素怒 System.out.println("最後一個元素是:" + list.getLast());}/* * void addFirst(E e): 在集合的開頭位置添加元素。 * void addLast(E e): 在集合的尾部添加元素。 */public static void method1() { //創建LinkedList對象 LinkedList<String> list = new LinkedList<>(); //添加元素 list.add("達爾文"); list.add("達文西"); list.add("達爾優"); //列印這個集合 System.out.println("list:" + list);//[達爾文, 達文西, 達爾優] //調用addFirst添加元素 list.addFirst("曹操"); System.out.println("list:" + list);//[曹操, 達爾文, 達文西, 達爾優] //調用addLast方法添加元素 list.addLast("大喬"); System.out.println("list:" + list);//[曹操, 達爾文, 達文西, 達爾優, 大喬]}}