日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中使用ArrayList的10个示例–教程

發布時間:2023/12/3 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中使用ArrayList的10个示例–教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中的ArrayList是HashMap之后最常用的集合類。 Java ArrayList表示一個可自動調整大小的數組,并用于代替數組。 由于創建數組后我們無法修改數組的大小,因此我們更喜歡在Java中使用ArrayList,一旦數組滿了,它就會自動調整大小。 Java中的ArrayList實現List接口,并允許null 。 ArrayList還保持元素的插入順序,并允許與不允許重復的任何Set實現相反的重復。

ArrayList同時支持Iterator和ListIterator進行迭代,但建議使用ListIterator因為它允許程序員沿任一方向遍歷列表,在迭代過程中修改列表并獲取Iterator在列表中的當前位置。 但是,在使用ListIterator時,您無需太小心,因為ListIterator沒有當前元素; 它的光標位置始終位于調用previous()將返回的元素與調用next()返回的元素之間。 在本Java ArrayList教程中,我們將了解如何創建Java ArrayList并在Java ArrayList上執行各種操作。 在許多Java核心訪談中,諸如ArrayList和Vector之間的差異或LinkedList與ArrayList之類的問題,該集合類也是最受歡迎的。

ArrayList已在Java 5(老虎)中進行了修改,以支持泛型 ,這由于增強的類型安全性而使Java ArrayList更加強大。 在Java5之前,由于沒有泛型,因此在編譯時不進行類型檢查,這意味著有可能在ArrayList中存儲不同類型的元素,該元素用于某些目的,并最終在運行時導致ClassCastException 。

使用泛型,您可以創建Java ArrayList,該Java ArrayList僅接受在創建期間指定的對象類型,如果有人嘗試將其他任何對象插入Java中的ArrayList,則會導致編譯錯誤。 例如,如果您創建一個String對象的ArrayList,則無法在其上存儲Integer,因為ArrayList的add()方法在將對象添加到Java中的ArrayList中之前會檢查Type,而Java 1.4的add()方法接受任何對象。

JDK 1.5中帶有泛型的Java ArrayList

同樣重要的是要記住, ArrayList不同步,并且不應在多個線程之間共享。 如果多個線程同時訪問Java ArrayList實例,并且至少有一個線程在結構上修改列表,則必須在外部對其進行同步。 (根據Java文檔,結構修改是添加或刪除一個或多個元素或顯式調整后備數組大小的任何操作;僅設置元素的值不是結構修改。)

通常,通過在自然封裝列表的某個對象上進行同步來完成此操作。 如果不存在這樣的對象,則應使用Collections.synchronizedList()方法“包裝”列表。 建議在創建時同步列表,以避免意外的對列表的非同步訪問。 另一個更好的選擇是使用CopyOnWriteArrayList ,它是從Java 5添加的,并針對多個并發讀取進行了優化。 在
CopyOnWriteArrayList通過創建基礎數組的新副本來實現所有可變操作(添加,設置等),這就是為什么將其稱為“ CopyOnWrite ”。

Java中的ArrayList示例

讓我們看一些用Java創建ArrayList并使用它們的示例 。 我試圖提供盡可能多的示例,以說明Java ArrayList上可能的不同操作。 如果您需要其他Java ArrayList示例,請告訴我,我將在此處添加它們。

Java ArrayList示例1:如何創建ArrayList

您可以在Java中使用帶有或不帶有泛型的ArrayList,因為增強的類型安全性,建議使用泛型版本都允許。

在此示例中,我們將創建一個String的ArrayList。 如果我們嘗試除String之外的任何其他對象,則此ArrayList將僅允許String并將引發編譯錯誤。 如果您發現需要在表達式的右側和左側指定類型,那么從Java 1.7開始,如果使用菱形運算符(尖括號),則只需要在左側指定即可。 如果您定義嵌套類型的ArrayList,則可以節省大量空間。

ArrayList<String> stringList = new ArrayList<String> ; // Generic ArrayList to store only String ArrayList<String> stringList = new ArrayList<>(); // Using Diamond operator from Java 1.7

Java ArrayList示例2:如何將元素添加到ArrayList中

您可以通過調用add()方法將元素添加到ArrayList中。 由于我們使用的是泛型,并且這是String的ArrayList,因此第二行將導致編譯錯誤,因為此ArrayList僅允許使用String元素。

stringList.add("Item"); //no error because we are storing String stringList.add(new Integer(2)); //compilation error

Java ArrayList示例3:如何查找ArrayList的大小

Java中ArrayList的大小是當前存儲在ArrayList中的元素總數。 您可以通過在其上調用size()方法輕松地在ArrayList中找到許多元素。 請記住,這可能與支持ArrayList的數組的長度不同。 實際上,后備數組的長度總是大于ArrayList的大小,以便它可以存儲更多元素。

int size = stringList.size();

Java ArrayList示例4:檢查Java ArrayList中項目的索引

您可以使用ArrayList the indexOf()方法來查找特定對象的索引。 使用此方法時,ArrayList在內部使用equals()方法查找對象,因此請確保您的元素實現equals()
和hashCode()或Object類的默認實現,將使用基于內存位置的對象進行比較。

int index = stringList.indexOf("Item"); //location of Item object in List

如何在循環中從ArrayList檢索元素

很多時候,我們需要遍歷ArrayList并對每個檢索到的項目執行一些操作。 這是不使用Iterator的兩種方法。 我們將在下一節中看到Iterator的用法。

for (int i = 0; i < stringList.size(); i++)String item = stringList.get(i);System.out.println("Item " + i + " : " + item); }From Java5 onwards you can use foreach loop as wellfor(String item: stringList){ System.out.println("retrieved element: " + item); }

如何在ArrayList中搜索元素?

有時我們需要檢查Java的ArrayList中是否存在某個元素,為此,我們可以使用Java的contains()方法。 contains()方法采用ArrayList創建中定義的對象類型,如果此列表包含指定的元素,則返回true。 或者,您也可以使用Collections.binarySearch()方法查看List中是否存在對象。 ArrayList , Vector , CopyOnWriteArrayList和Stack implements RandomAccess接口,它們可用于執行二進制搜索。 要了解哪種方法比較好,看到這個文章。

如何在Java中檢查ArrayList是否為空

我們可以使用ArrayList的isEmpty()方法檢查它是否為空。 如果此ArrayList不包含任何元素,則isEmpty()方法返回true。 您還可以使用List的size()方法檢查List是否為空。 如果返回的大小為零,則ArrayList為空。

boolean result = stringList.isEmpty(); //isEmpty() will return true if List is emptyif(stringList.size() == 0){System.out.println("ArrayList is empty"); }

如何從ArrayList中刪除元素

有兩種方法可以從Java中的ArrayList中刪除任何元素 。 您可以根據元素的索引或提供對象本身來刪除它。 Remove remove (int索引)和remove(Object o)方法用于從Java中的ArrayList中刪除任何元素。 由于ArrayList允許重復,因此值得注意的是remove(Object o)從此列表中刪除指定元素的首次出現(如果存在)。 在下面的代碼中,第一次調用將從ArrayList中刪除第一個元素,而第二次調用將從Java中的ArrayList中刪除第一次出現的項。

stringList.remove(0); stringList.remove(item);

有關從ArrayList刪除元素的正確方法的詳細討論,請查看本教程 。

將數據從一個ArrayList復制到另一個ArrayList

為此,您需要多次創建ArrayList的副本,可以使用addAll(Collection c)
Java中ArrayList的方法,用于將ArrayList上的所有元素復制到另一個ArrayList。 下面的代碼會將stringList所有元素添加到新創建的copyOfStringList 。

ArrayList<String> copyOfStringList = new ArrayList<String>(); copyOfStringList.addAll(stringList);

如何替換ArrayList中特定索引處的元素?

您可以使用Java ArrayList的set ( int index , E element )方法來替換特定索引中的任何元素。 下面的代碼將把stringList的第一個元素從“ Item ” stringList為“ Item Item2 ”。

stringList.set(0,"Item2");

如何從ArrayList中刪除所有元素?

Java中的ArrayList提供了clear()方法,該方法從此列表中刪除所有元素。 下面的代碼將從我們的stringList所有元素,并使列表為空。 您可以在清除后重新使用Java ArrayList 。

stingList.clear();

如何在Java中從ArrayList轉換為Array

ArrayList為您提供了從ArrayList取回陣列的便利 。 您可以使用toArray(T[] a)方法以適當的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數組。 “ a ”是要存儲列表元素的數組(如果足夠大的話); 否則,將為此分配一個具有相同運行時類型的新數組。

String[] itemArray = new String[stringList.size()]; String[] returnedArray = stringList.toArray(itemArray);

如果您想將ArrayList轉換回Array,請參見用Java 將數組轉換為ArrayList的3種方法

如何在Java中同步ArrayList?

有時,您需要在Java中同步ArrayList以使其在多個線程之間可共享,您可以為此使用Collections實用程序類,如下所示。

List list = Collections.synchronizedList(new ArrayList(...));

盡管也有其他選擇,例如,如果您需要同步列表,那么您也可以使用CopyOnWriteArrayList ,它是Java 1.5上添加的并發列表,并且在讀取性能方面優于同步ArayList。 您還可以查看本教程,以了解有關如何在Java中同步ArrayList的更多信息?

如何在Java中從Array創建ArrayList?

Java中的ArrayList令人驚奇,您甚至可以從已經存在的數組中創建一個充滿元素的ArrayList。 為此,您需要使用Arrays.asList(T... a)方法,該方法返回由指定數組支持的固定大小的列表。

ArrayList stringList = Arrays.asList(new String[]{"One", "Two", "Three"); //this is not read only List you can still update value of existing elements

如何在Java中循環遍歷ArrayList?

您可以使用Iterator或ListIterator 在ArrayList上遍歷 。 ListIterator允許您在兩個方向上遍歷,而Iterator和ListIterator都允許您在遍歷時從Java中的ArrayList中刪除元素 。

Iterator itr = stringList.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); }ListIterator listItr = stringList.listIterator(); while(listItr.hasNext()){ System.out.println(itr.next()); }

請參閱如何在Java中循環ArrayList,以了解在Java中遍歷列表的其他兩種方法。

如何在Java中對ArrayList進行排序?

您可以使用
Collections.sort(List list)方法可以按Comparable接口定義的自然順序對Java ArrayList進行排序,并且可以使用Collections.sort(List list, Comparator c)方法根據自定義Comparator對Java ArrayList進行排序。 您還可以查看此帖子, 以在Java中按降序對ArrayList進行排序

如何在Java中將ArrayList轉換為HashSet

大多數Collection類都提供一個構造函數,該構造函數接受Collection對象作為參數。 哪個可用于將一個集合的所有元素復制到另一個? HashSet還提供了可用于將所有對象從ArrayList復制到HashSet此類構造函數。 但是要小心,因為HashSet不允許重復,某些對象將不被包括在內,從而導致對象數量減少。 有關分步示例,請參見如何在Java中將ArrayList轉換為HashSet 。

有關Java中ArrayList的提示

  • ArrayList不是同步的集合,因此不適合在多個線程之間同時使用。 如果要在多線程環境中像數據結構一樣使用ArrayList ,則需要使用新的CopyonWriteArrayList或使用Collections.synchronizedList()創建一個同步列表。 前者是并發收集程序包的一部分,并且比第二個程序包具有更高的可伸縮性,但僅在讀者多而寫少的情況下才有用。 由于每次寫操作都會創建一個新的ArrayList副本,因此如果在大量寫操作的環境中使用它,可能會顯得過高。 第二個選擇是嚴格同步的集合,就像Vector或Hashtable ,但是它不可伸縮,因為一旦線程數量急劇增加,爭用就成為一個大問題。
  • 建議對并發多線程環境使用CopyOnWriteArrayList ,因為它已針對多個并發讀取進行了優化,并為寫操作創建了副本。 這是在Tiger(又名JDK 1.5)中添加的。 它是java.util.concurrent包的一部分,以及ConcurrentHashMap和BlockingQueue 。
  • 當ArrayList滿時,它將創建另一個數組,并使用System.arrayCopy()將所有元素從一個數組復制到另一個數組。 這是插入需要很多時間的地方。
  • Java ArrayList的Iterator和ListIterator都是快速失敗的,這意味著如果在創建Iterator之后的任何時間對ArrayList進行結構修改,則除了通過迭代器自己的remove或add方法之外,Iterator都會拋出ConcurrentModificationException 。 因此,面對并發修改,Iterator會快速干凈地失敗,這就是為什么將其稱為快速失敗。
  • 不保證ConcurrentModificationException ,它只是盡力而為。
  • 如果要創建同步列表 ,建議在創建基礎ArrayList實例的同時創建該列表 ,以防止意外的非同步訪問列表。
  • 應用程序可以通過使用ensureCapacity()操作在添加大量元素之前增加ArrayList實例的容量。 由于ArrayList的增量填充,這可以減少增量重新分配的數量。
  • size() , isEmpty() , get() , set() , iterator()和listIterator()操作在恒定時間內運行, 因為ArrayList基于Array,但是與LinkedList相比,添加或刪除元素的代價LinkedList 。
  • Java 1.5中對ArrayList類進行了增強,以支持泛型,該泛型在ArrayList上添加了額外的類型安全性。 建議使用ArrayList的泛型版本,以確保ArrayList僅包含指定的元素類型,并避免任何ClassCastException 。
  • 由于ArrayList實現List接口,因此它保持元素的插入順序,并且允許重復。
  • 如果我們在Java中將ArrayList引用設置為null ,則ArrayList所有元素
    有資格使用Java進行垃圾收集 ,
    前提是不再存在針對這些對象的強大參考。
  • 始終使用isEmpty()方法檢查ArrayList是否為空,而不是使用size() == 0檢查。 前者更具可讀性,如下所示: if(!listOfItems.isEmpty(){System.out.println("Starting order processing); }if(listOfOrders.size() != 0){System.out.println("Order processing started); }Read more: http://javarevisited.blogspot.com/2011/05/example-of-arraylist-in-java-tutorial.html#ixzz3wpLtPwop
  • 從Java 5 Tiger起,對ArrayList進行了參數設置,您應該始終使用此類的通用版本。 這樣可以防止在水果列表中插入魚或在紙牌列表中插入骰子的經典錯誤。 使用泛型時,編譯器將捕獲這些錯誤。 因此,由于編譯器確保正確的對象類型可以從Collection中存儲和檢索,因此它還可以在運行時防止ClassCastException 。 由于Java編譯器會自動添加隱式轉換,因此它也消除了手動轉換的需要。 對于初學者來說,了解泛型有點棘手,但是值得學習,因為如今沒有泛型就沒有身體使用集合。
  • 何時在Java中使用ArrayList

    現在,您知道什么是ArrayList,此類的不同方法以及其工作方式。 現在是時候學習何時使用ArrayList了。 對于Java程序員來說,了解Collection類非常重要,同樣重要的是開發決定在特定情況下使用哪個collection的能力。 大多數時候,兩個因素決定著您的決策,性能和功能。

    ArrayList是基于索引的數據結構,這意味著如果您知道索引,它就可以提供O(1)搜索性能;類似地,在最佳情況下向ArrayList中添加元素也是O(1)性能,但是如果添加會觸發列表大小的調整,則它將在O(n)級別上,因為將花費大量時間將舊列表的元素復制到新的ArrayList中。 回到功能上,如果您適合使用重復的元素,則僅使用此集合類。 它不是線程安全的,所以不要在并發環境中使用它。

    翻譯自: https://www.javacodegeeks.com/2016/01/10-examples-using-arraylist-java-tutorial.html

    總結

    以上是生活随笔為你收集整理的Java中使用ArrayList的10个示例–教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。