Java ArrayList和HashMap的区别

Java ArrayList和HashMap的区别

ArrayList 是集合框架的一部分,存在于java.util包中。它为我们提供了Java中的动态数组。虽然它可能比标准数组慢,但在需要对数组进行大量操作的程序中是很有帮助的。 HashMapJava 1.2以来集合的一部分。它提供了Java的Map接口的基本实现。它以(Key, Value)对的形式存储数据,为了访问一个值,人们必须知道它的键。HashMap之所以被称为HashMap,是因为它使用了一种叫做Hashing的技术。

散列是一种将大的字符串转换为代表同一字符串的小字符串的技术。一个较短的值有助于索引和快速搜索。HashSet也在内部使用HashMap。它在内部使用一个链接列表来存储键值对,在HashSet中已经有详细的解释和进一步的文章。

在这里,我们将继续讨论它们之间共享的共同特征。然后,我们将通过在一个Java程序中对它们进行一系列的操作,来讨论它们之间的差异,并感知输出的差异。

首先,让我们讨论 Java中ArrayList和HashMap的相似之处

  • ArrayList和HashMap,都是不同步的。所以为了在多线程环境中使用它们,首先需要同步化。
  • ArrayList和HashMap都允许空值。ArrayList允许空值,HashMap允许空键和值。
  • ArrayList和HashMap都允许重复,ArrayList允许重复的元素,而HashMap允许重复的值
  • ArrayList和HashMap都可以通过Java中的Iterator进行遍历。
  • 这两个地方都使用数组,ArrayList是由数组支持的,而HashMap内部也是由数组实现的。
  • 两者都使用 _ get()方法_ ,ArrayList.get()方法基于索引工作,而HashMap.get()方法需要一个对象类型的参数key_element,指的是要获取其相关值的键,所以两者都提供了恒定的时间性能。

Java中ArrayList和HashMap的区别

到目前为止,我们从上面提供的媒体中得到了一些明确的信息,现在我们将对它们进行一系列的操作,以便通过总结同一操作的输出差异来感知真正的差异,这增加了我们理解ArrayList和HashMap之间差异的智力。

  • 语法旁边的层次结构
  • 插入顺序的维护
  • 内存消耗
  • 重复元素的处理
  • 获取元素的便利性
  • 空元素的存储

Java中ArrayList和HashMap的区别

1. 语法上的层次性

实现的接口: ArrayList实现了List接口,而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不维护任何顺序,因此返回的键值对任何种类的顺序。

例子

// 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 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中,元素是通过其相应的键来获取的。这意味着必须始终记住键。

注意: ArrayList get(index)方法总是给出O(1)的时间复杂度,而HashMap get(key)在最好的情况下是O(1),在最坏的情况下是O(n)的时间复杂度。

例子

// 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 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实现了List接口 java HashMap实现了Map接口
ArrayList总是保持元素的插入顺序 HashMap不保持插入的顺序。
ArrayList只存储值或元素 HashMap存储键和值对
ArrayList可以包含重复的元素 HashMap不包含重复的键,但包含重复的值。
我们可以在ArrayList中拥有任意数量的空元素 在HashMap中我们只能有一个空键和任意数量的空值
ArrayList get()方法总是给出一个O(1)的性能 HashMap get()方法在最好的情况下可以是O(1),在最坏的情况下是O(n)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程