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 表示應該獲取其關聯值的鍵,因此兩者都提供恒定時間性能。
到目前為止,我們從上麵提供的媒體中得到了一些清晰的信息,現在我們將對它們執行一組操作,以便通過同一操作的輸出差異來感知真正的差異,這增加了我們理解 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) |
相關用法
- Java ArrayList和HashSet的區別用法及代碼示例
- Java ArrayList add()用法及代碼示例
- Java ArrayList addAll()用法及代碼示例
- Java ArrayList clear()用法及代碼示例
- Java ArrayList clone()用法及代碼示例
- Java ArrayList contains()用法及代碼示例
- Java ArrayList get()用法及代碼示例
- Java ArrayList indexOf()用法及代碼示例
- Java ArrayList removeAll()用法及代碼示例
- Java ArrayList remove()用法及代碼示例
- Java ArrayList size()用法及代碼示例
- Java ArrayList isEmpty()用法及代碼示例
- Java ArrayList subList()用法及代碼示例
- Java ArrayList set()用法及代碼示例
- Java ArrayList sort()用法及代碼示例
- Java ArrayList toArray()用法及代碼示例
- Java ArrayList toString()用法及代碼示例
- Java ArrayList ensureCapacity()用法及代碼示例
- Java ArrayList lastIndexOf()用法及代碼示例
- Java ArrayList retainAll()用法及代碼示例
- Java ArrayList containsAll()用法及代碼示例
- Java ArrayList trimToSize()用法及代碼示例
- Java ArrayList removeRange()用法及代碼示例
- Java ArrayList replaceAll()用法及代碼示例
- Java ArrayList removeIf()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Difference Between ArrayList and HashMap in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。