當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java ArrayList和HashMap的區別用法及代碼示例


ArrayList是的一部分采集框架並存在於java.util包。它為我們提供了Java中的動態數組。雖然它可能比標準數組慢,但對於需要對數組進行大量操作的程序很有幫助。HashMap自 Java 1.2 起就成為 Java 集合的一部分。它提供了基本的實現Map它將數據存儲在(鍵,值)對中,為了訪問值,必須知道它的鍵。 HashMap 也稱為 HashMap,因為它使用了一種稱為哈希的技術。

Hashing is a technique of converting a large String to a small String that represents the same String. A shorter value helps in indexing and faster searches. HashSet also uses HashMap internally. It internally uses a link list to store key-value pairs already explained in HashSet in detail and further articles.

在這裏,我們將繼續討論它們之間的共同特征。然後,我們將通過在單個 Java 程序中對它們執行一組操作並感知輸出之間的差異來討論它們之間的差異。

首先,讓我們討論一下Java 中 ArrayList 和 HashMap 之間的相似之處

  • ArrayList和HashMap,兩者都不同步。所以為了在多線程環境中使用它們,需要首先進行同步。
  • ArrayList 和 HashMap 都允許為 null。 ArrayList 允許空值,HashMap 允許空鍵和值
  • ArrayList 和 HashMap 都允許重複,ArrayList 允許重複元素,HashMap 允許重複值
  • ArrayList和HashMap都可以通過Java中的Iterator來遍曆。
  • 兩者Somewhere都使用數組,ArrayList由數組支持,HashMap內部也由Array實現
  • 兩者都使用get()方法,ArrayList.get() 方法基於索引工作,而 HashMap.get() 方法采用一個對象類型的參數 key_element 表示應該獲取其關聯值的鍵,因此兩者都提供恒定時間性能。

Java Collection

到目前為止,我們從上麵提供的媒體中得到了一些清晰的信息,現在我們將對它們執行一組操作,以便通過同一操作的輸出差異來感知真正的差異,這增加了我們理解 ArrayList 和 ArrayList 之間差異的智力。哈希映射。

  • 層次結構和語法
  • 維護廣告訂單
  • 內存消耗
  • 重複元素處理
  • 輕鬆獲取元素
  • 空元素存儲

Differences Between ArrayList and HashMap in Java

1. 層次結構和語法

接口實現:ArrayList 實現List Interface而 HashMap 是實現Map.

用法:ArrayList 類的聲明

public class ArrayList 
extends AbstractList 
implements List, RandomAccess, Cloneable, Serializable

用法:HashMap 類的聲明

public class HashMap 
extends AbstractMap 
implements Map, Cloneable, Serializable  

2. 廣告訂單的維護

ArrayList 維護插入順序,而 HashMap 不維護插入順序,這意味著 ArrayList 以相同的順序返回列表項,而 HashMap 不維護任何順序,因此返回的 key-values 與任何類型的順序配對。

例子:

Java


// Java Program to illustrate Maintenance of Insertion Order 
// in ArrayList vs HashMap  
  
// Importing all utility classes 
import java.util.*; 
  
// Main class 
class GFG { 
  
    // Main driver method 
    public static void main(String args[]) 
    { 
  
        // Creating ArrayList of string type 
        ArrayList<String> list = new ArrayList<String>(); 
  
        // Adding object in ArrayList 
        list.add("A"); 
        list.add("B"); 
        list.add("C"); 
        list.add("D"); 
  
        // Invoking ArrayList object 
        System.out.println("ArrayList: " + list); 
  
        // Creating HashMap 
        HashMap<Integer, String> hm 
            = new HashMap<Integer, String>(); 
  
        // Adding object in HashMap object created above 
        // using put() method 
        hm.put(1, "A"); 
        hm.put(2, "B"); 
        hm.put(3, "C"); 
        hm.put(4, "D"); 
  
        // Invoking HashMap object 
        // It might or might not display elements 
        // in the insertion order 
        System.out.print("Hash 
                         Map: " + hm); 
    } 
}
輸出:
ArrayList: [A, B, C, D]
HashMap: {1=A, 2=B, 3=C, 4=D}

3. 內存消耗

ArrayList 僅將元素存儲為值,並在內部維護每個元素的索引。而 HashMap 存儲帶有鍵值對的元素,這意味著兩個對象。所以HashMap相對來說占用更多的內存。

用法:ArrayList

list.add("A");
// String value is stored in ArrayList

用法:HashMap

hm.put(1, "A");
// Two String values stored
// as the key value pair in HashMap

4. 重複元素處理

ArrayList 允許重複元素,而 HashMap 不允許重複鍵,但允許重複值。

示例

Java


// Java Program to Illustrate Duplicate Elements Insertion 
// in ArrayList vs HashMap 
  
// Importing utility classes 
import java.util.*; 
  
// Main class 
class GFG { 
  
    // Main driver method 
    public static void main(String args[]) 
    { 
        // Creating ArrayList of string type 
        ArrayList<String> list = new ArrayList<String>(); 
  
        // Adding object in ArrayList 
        list.add("A"); 
        list.add("B"); 
  
        // Add duplicates 
        list.add("A"); 
        list.add("A"); 
  
        // Invoking ArrayList object 
        System.out.println("ArrayList: " + list); 
  
        // Creating HashMap 
        HashMap<Integer, String> hm 
            = new HashMap<Integer, String>(); 
  
        // Adding object in HashMap 
        hm.put(1, "A"); 
        hm.put(2, "B"); 
  
        // Add duplicates key 
        // Change value if index exist 
        hm.put(3, "A"); 
        hm.put(3, "A"); 
  
        // Add duplicates values 
        // allow duplicates value 
        hm.put(4, "A"); 
        hm.put(5, "A"); 
  
        // Invoking HashMap object 
        System.out.print("HashMap: " + hm); 
    } 
}
輸出:
ArrayList: [A, B, A, A]
HashMap: {1=A, 2=B, 3=A, 4=A, 5=A}

5. 輕鬆獲取元素

在ArrayList中,可以通過指定元素的索引來輕鬆獲取元素。但在 HashMap 中,元素是通過對應的鍵來獲取的。這意味著必須始終記住 key 。

Note: ArrayList get(index) method always gives O(1) time complexity While HashMap get(key) can be O(1) in the best case and O(n) in the worst case time complexity.

示例

Java


// Java Program to Illustrate Ease of fetching an Element 
// in ArrayList vs HashMap 
  
// Importing all utility classes 
import java.util.*; 
  
// Main class 
class GFG { 
  
    // main driver method 
    public static void main(String args[]) 
    { 
        // Creating ArrayList of string type 
        ArrayList<String> list = new ArrayList<String>(); 
  
        // Adding object in ArrayList 
        list.add("A"); 
        list.add("B"); 
        list.add("C"); 
        list.add("D"); 
  
        // Invoking ArrayList object 
        System.out.println("First Element of ArrayList: "
                           + list.get(0)); 
        System.out.println("Third Element of ArrayList: "
                           + list.get(2)); 
  
        // Creating HashMap 
        // Declaring object of integer and string type 
        HashMap<Integer, String> hm 
            = new HashMap<Integer, String>(); 
  
        // Adding object in HashMap 
        hm.put(1, "A"); 
        hm.put(2, "B"); 
        hm.put(3, "C"); 
        hm.put(4, "D"); 
  
        // Invoking HashMap object 
        System.out.println("HashMap value at Key 1: "
                           + hm.get(1)); 
        System.out.println("HashMap value at Key 3: "
                           + hm.get(3)); 
    } 
}
輸出:
First Element of ArrayList: A
Third Element of ArrayList: C
HashMap value at Key 1: A
HashMap value at Key 3: C

6. 空元素存儲

在ArrayList中,可以存儲任意數量的空元素。而在HashMap中,隻允許有一個空鍵,但值可以是任意數字。

示例

Java


// Java Program to Illustrate Null Element Storage in 
// Arraylist vs HashMap 
  
// Importing all utility classes 
import java.util.*; 
  
// Main class 
class GFG { 
  
    // main driver method 
    public static void main(String args[]) 
    { 
        // Creating ArrayList of string type 
        ArrayList<String> list = new ArrayList<String>(); 
  
        // Adding object in ArrayList 
        // using standard add() method 
        list.add("A"); 
  
        // Adding first null value 
        list.add(null); 
        list.add("C"); 
  
        // Adding two null value again 
        list.add(null); 
        list.add(null); 
  
        // Invoking ArrayList object 
        System.out.println("ArrayList: " + list); 
  
        // Creating HashMap 
        // Declaring object of integer and string type 
        HashMap<Integer, String> hm 
            = new HashMap<Integer, String>(); 
  
        // Adding object in HashMap 
        hm.put(1, "A"); 
        hm.put(2, "B"); 
  
        // add null key 
        hm.put(null, "C"); 
  
        // Again adding null key 
        // which replace value of first 
        // insert null key value 
        hm.put(null, null); 
  
        // Adding second null value 
        hm.put(3, null); 
  
        // Printing the elements of Hashmap 
        System.out.println("HashMap: " + hm); 
    } 
}
輸出:
ArrayList: [A, null, C, null, null]
HashMap: {null=null, 1=A, 2=B, 3=null}

那麽,讓我們弄清楚ArrayList 和 HashMap 之間的區別在表中:

ArrayList

HashMap

java ArrayList 實現列表接口
java HashMap 實現Map接口
ArrayList始終保持元素的插入順序
HashMap 不維護插入順序。
ArrayList僅存儲值或元素
HashMap 存儲鍵值對
ArrayList 可以包含重複元素
HashMap 不包含重複的鍵,但包含重複的值。
ArrayList 中可以有任意數量的 null 元素
HashMap 中隻能有一個空鍵和任意數量的空值
ArrayList get() 方法始終提供 O(1) 性能
HashMap get()method 在最好的情況下可以是 O(1),在最壞的情況下可以是 O(n)


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Difference Between ArrayList and HashMap in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。