Java中TreeMap、HashMap和LinkedHashMap的区别

Java中TreeMap、HashMap和LinkedHashMap的区别

TreeMap, HashMap和LinkedHashMap:有什么相似之处?

  • 所有这些都提供了一个key->值映射和一种遍历键的方法。这些类之间最重要的区别是时间保证和键的排序。
  • 所有三个类HashMap、TreeMap和LinkedHashMap实现了java.util.Map接口,并表示从唯一键到值的映射。

HashMap

HashMap提供0(1)个查找和插入。但是,如果遍历键,键的顺序基本上是任意的。它是由一个链表数组实现的。

语法:

public class HashMap extends AbstractMap 
implements Map,Cloneable, Serializable
  • HashMap包含基于键的值。
  • 它只包含独特的元素。
  • 它可以有一个空键和多个空值。
  • 它没有秩序。

LinkedHashMap

LinkedHashMap提供0(1)个查找和插入。键按插入顺序排序。它是通过双链接桶实现的。

语法:

public class LinkedHashMap extends HashMap 
implements Map
  • LinkedHashMap包含基于键的值。
  • 它只包含独特的元素。
  • 它可以有一个空键和多个空值。
  • 它与HashMap一样,只是维护插入顺序。

TreeMap

TreeMap提供O(log N)的查找和插入。键是有序的,所以如果需要按有序的顺序遍历键,可以这样做。这意味着键必须实现Comparable接口。TreeMap是由红黑树实现的。

语法:

public class TreeMap extends AbstractMap implements
NavigableMap, Cloneable, Serializable
  • TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
  • 它只包含独特的元素。
  • 它不能有空键,但可以有多个空值。
  • 这与HashMap保持升序相同(使用其键的自然顺序排序)。

Hashtable

“Hashtable”是基于哈希的映射的通用名称。

语法:

public class Hashtable extends Dictionary implements
Map, Cloneable, Serializable
  • 哈希表是一个列表数组。每个列表被称为一个桶。bucket的位置通过调用hashcode()方法来确定。哈希表包含基于键的值。
  • 它只包含独特的元素。
  • 它可能没有任何空键或值。
  • 它是同步的。
  • 它是一个遗留类。

HashMap

// Java program to print ordering
// of all elements using HashMap
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
 
    // Driver method to test above method
    public static void main (String[] args)
    {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        insertAndPrint(map);
    }
}

LinkedHashMap

// Java program to print ordering
// of all elements using LinkedHashMap
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
     
    // Driver method to test above method
    public static void main (String[] args)
    {
        LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
        insertAndPrint(map);
    }
}

TreeMap

// Java program to print ordering of
// all elements using TreeMap
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
 
    // Driver method to test above method
    public static void main (String[] args)
    {
        TreeMap<Integer, String> map = new TreeMap<Integer, String>();
        insertAndPrint(map);
    }
}

HashMap的输出:

-1, 0, 1, -2, 2,     
// ordering of the keys is essentially arbitrary (any ordering)

LinkedHashMap的输出:

 1, -1, 0, 2, -2,     
// Keys are ordered by their insertion order

TreeMap的输出:

 -2, -1, 0, 1, 2,   
// Keys are in sorted order

比较表

Java中TreeMap、HashMap和LinkedHashMap的区别

现实生活中应用

  1. 假设您正在创建名称到Person对象的映射。您可能希望按姓名的字母顺序定期输出人员。TreeMap可以让你做到这一点。
  2. TreeMap还提供了一种方法,只要给定一个名字,就可以输出接下来的10个人。这对于“More”函数在许多应用程序中都很有用。
  3. 当您需要键的顺序来匹配插入顺序时,LinkedHashMap非常有用。在缓存情况下,当您想要删除最旧的项时,这可能很有用。
  4. 通常情况下,除非有不使用HashMap的理由,否则您会使用HashMap。也就是说,如果您需要按插入顺序取回键,那么可以使用LinkedHashMap。如果您需要以真实/自然的顺序获得键,那么使用TreeMap。否则,HashMap可能是最好的。它通常更快,需要的开销更少。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程