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.7Java 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 errorJava 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類的默認實現,將使用基于內存位置的對象進行比較。
如何在循環中從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中特定索引處的元素?
您可以使用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的提示
有資格使用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个示例–教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓云模拟器网页版(安卓云模拟器)
- 下一篇: java 接口 安全加密_Java中的安