Java基礎教程:Java基礎知識之List接口

2020-12-08 黑馬程式設計師

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);//[曹操, 達爾文, 達文西, 達爾優, 大喬]}}

相關焦點

  • 計算機語言java中得List
    java中的集合分為四類:第一個是List列表,第二個是Queue隊列,第三個是Set集合,第四個是Map映射。今天所要介紹的List。List接口存儲的數據必須有序的,不唯一(可重複)。啥叫有序和無序呢?唯一與不唯一又有啥區別呢?所謂的有序就是List下標是有序的,感覺說和沒說沒啥區別!
  • JAVA8 新特性詳解
    ArrayList<Integer>();list.add(50);list.add(18);list.add(6);list.add(99);list.add(32);System.out.println(list.toString()+"排序之前");LambdaTest3 lt3 = Collections::sort;lt3.sort(list, (a,b) -> {return a-b;
  • Java基礎面試題簡單總結
    Java基礎方面:1、作用域public,private,protected,以及不寫時的區別答:區別如下:寫時默認為friendly 2、Anonymous Inner Class (匿名內部類)JAVA類實現序例化的方法是實現java.io.Serializable接口Collection框架中實現比較要實現Comparable 接口和 Comparator 接口33、STRING與STRINGBUFFER的區別。
  • java、php、python誰更容易學習呢?
    一階段為java基礎,包括java的基本介紹、數組、面向對象、類、線程、接口、反射等知識;二階段為JavaWeb部分,包括HTML、CSS3、JavaScript、MySQL資料庫、JSP、Ajax、JDBC連接池、jQuery等;三階段為java框架學習,包括Maven、Hibernate、Spring、Spring MVC、MyBatis、WebService、SVN、Activiti等;四階段為
  • 你必須掌握的 21 個 Java 核心技術!
    JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。我在面試有超過3年Java經驗的開發者的時候, JVM幾乎就是一個必問的問題了。當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。
  • java如何快速入門?
    下面是一些可能幫助您成長為Java開發人員並獲得更多關於該語言的知識的技巧。java如何快速入門正確掌握Java的基本知識由於Java為開發人員提供了如此多的特性和選項,人們有時會被分散注意力在太短的時間內學習了太多的東西
  • JAVA 基礎:JAVA開發環境搭建
    打開Path變量,在變量值最前加入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(方法同上)4.驗證:運行cmd,輸入java -version,顯示java版本則成功。或使用 vi /etc/profile 命令,將上面的代碼,拷貝到 profile文件中,輸入:shift+I 快捷鍵 ,輸入完成 按esc 退出編輯模式,保存並退出 shift+: 鍵,輸入wq5.使用source命令更新配置文件 : source /etc/profile6.輸入java
  • 論Java中的抽象類與接口
    抽象類的作用《thinking in java》抽象類是普通的類與接口之間的一種中庸之道。Java中可以implements多個接口,多繼承的含義便是接入多個接口(繼承只能單繼承)一個類可以實現一個或多個接口,繼承使用extends關鍵字(但接口只能繼承接口),實現則使用implements關鍵字。
  • 黑馬程式設計師Java教程:Java基礎教程之MAP集合
    Java提供了專門的集合類用來存放這種對象關係的對象,即java.util.Map接口。我們通過查看Map接口描述,發現Map接口下的集合與Collection接口下的集合,它們存儲數據的形式不同,如下圖。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    程式語言排行榜目前很多軟體都是用Java寫的,新出的系統和函數庫為了市場,也會儘量和Java兼容或者提供Java的接口。其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 如何自學Java?避免誤區
    實際中在學習Java編程之前需要先學習一些編程基礎,新手零基礎怎麼自學java開發?自學java開發有什麼誤區?新手往往無非進行系統的學習,主要原因是自己搜集信息較為零散,學習過程中無專業的老師引導,自己會走進一些學習的誤區。
  • Java新玩法,Java8新特性終極解析
    java8你都搞清楚沒啊??如果還沒搞清楚的童鞋可以趕快看過來了...現在可以在接口中定義靜態方法了。例如,java.util.Comparator接口中現在擁有一個靜態的naturalOrder方法。
  • 阿里P8教你Java註解與反射
    Ⅲ 自定義註解使用@interface在這裡插入代碼片定義註解,而且自動繼承java.lang.annotation.Annotation接口。:代表類的成員變量java.lang.reflect.Constructor:代表類的構造器…5.4 Class類通過Class對象可以得知某個類的屬性,方法,構造器,註解,以及實現了哪些接口等等信息。
  • 重學Java 設計模式:實戰迭代器模式「模擬公司組織架構樹結構關係...
    雖然這個設計模式在我們的實際業務開發中的場景並不多,但卻幾乎每天都要使用jdk為我們提供的list集合遍歷。另外增強的for循環雖然是循環輸出數據,但是他不是迭代器模式。迭代器模式的特點是實現Iterable接口,通過next的方式獲取集合元素,同時具備對元素的刪除等操作。而增強的for循環是不可以的。
  • 「零基礎學JAVA」基礎篇 第二章 JAVA編程初體驗
    JAVA【零基礎學編程】系列今天給大家帶來基礎篇 第二章 JAVA編程初體驗本節的部分編碼操作需要先安裝JDK開發工具;}}保存以後,我們右鍵它選擇重命名將文件的後綴「.txt」改成「.java」同時按住Win和R鍵,桌面左下角彈出『運行』窗口,輸入cmd,再回車。
  • java集合詳解合集
    關於Map,我們要從代碼復用的角度去理解,java是先實現了Map,然後通過包裝了一個所有value都為null的Map就實現了Set集合Map的這些實現類和子接口中key集的存儲形式和Set集合完全相同(即key不能重複)Map的這些實現類和子接口中value集的存儲形式和List
  • Java之Runnable表達式的簡單介紹
    各位小夥伴們大家好,這次小編要介紹的是Runnable表達式當我們要啟動一個線程去完成任務的時候,通常的做法會通過java.lang.Runnable接口來定義任務內容,並使用java.lang.Thread類來啟動線程,代碼如下:/*創建Runnable接口的實現類,重寫
  • Mars-java 3.0.15 發布,開始支持組件化
    就在今天,Mars-java發布了3.0.15版本,將開始支持組件化開放API,歡迎大家一起來開發組件無論你是誰,只要你有興趣,就可以基於Mars-java開發組件,為提升後端開發效率出一份力
  • 如何優雅的設計 Java 異常
    由於本文只作一些經驗之談,不涉及到基礎知識部分,如果讀者對異常的概念還很模糊,請先查看基礎知識。如何選擇異常類型異常的類別正如我們所知道的,java中的異常的超類是java.lang.Throwable(後文省略為Throwable),它有兩個比較重要的子類,java.lang.Exception(後文省略為Exception
  • Java基礎學習:java中整數類型變量
    以上就是小編針對「Java基礎學習:java中整數類型變量」的內容進行的回答,希望對大家有所幫助,關注動力節點,想了解更多Java技術知識或視頻資源留言給小編。