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
Java

语法: HashMap类的声明

public class HashMap 
extends AbstractMap 
implements Map, Cloneable, Serializable  
Java

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);
    }
}
Java

输出

ArrayList: [A, B, C, D]
HashMap: {1=A, 2=B, 3=C, 4=D}
Java

3.内存消耗

ArrayList只将元素存储为值,并在内部维护每个元素的索引。而HashMap用键和值对来存储元素,也就是两个对象。所以相对来说,HashMap需要更多的内存。

语法: ArrayList

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

语法: HashMap

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

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);
    }
}
Java

输出

ArrayList: [A, B, A, A]
HashMap: {1=A, 2=B, 3=A, 4=A, 5=A}
Java

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));
    }
}
Java

输出

First Element of ArrayList: A
Third Element of ArrayList: C
HashMap value at Key 1: A
HashMap value at Key 3: C
Java

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);
    }
}
Java

输出

ArrayList: [A, null, C, null, null]
HashMap: {null=null, 1=A, 2=B, 3=null}
Java

所以,让我们弄清楚 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教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册