Java中的TreeMap、HashMap和LinkedHashMap之间的区别
本文概述
先决条件:Java中的HashMap和TreeMap
TreeMap, HashMap和LinkedHashMap:有何相似之处?
- 它们都提供了一个键->值映射和一种遍历键的方法。这些类之间最重要的区别是时间保证和键的顺序。
- 所有三个类HashMap, TreeMap和LinkedHashMap实现java.util.Map接口, 表示从唯一键到值的映射。
关键点
HashMap:HashMap提供0(1)查找和插入。但是,如果对键进行迭代,键的顺序基本上是任意的。它是由一个链表数组实现的。
语法如下:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
- HashMap包含基于键的值。
- 它仅包含唯一元素。
- 它可能具有一个null键和多个null值。
- 它保持没有命令.
LinkedHashMap:LinkedHashMap提供0(1)查找和插入。键是按照它们的插入顺序排列的。它是由双链接桶实现的。
语法如下:
public class LinkedHashMap extends HashMap 0implements Map
- LinkedHashMap包含基于键的值。
- 它仅包含唯一元素。
- 它可能具有一个null键和多个null值。
- 与HashMap相同维持广告订单.
TreeMap:TreeMap提供O(log N)查找和插入。键是有序的,所以如果你需要按排序顺序遍历键,你可以这样做。这意味着key必须实现Comparable接口。TreeMap是由一个红黑树实现的。
语法如下:
public class TreeMap extends AbstractMap implementsNavigableMap, Cloneable, Serializable
- TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
- 它仅包含唯一元素。
- 它不能有空键, 但可以有多个空值。
- 与HashMap相同保持升序(按其键的自然顺序排序)。
Hashtable:
“Hashtable”是基于散列的映射的通用名称。
语法如下:
public class Hashtable extends Dictionary implementsMap, Cloneable, Serializable
- 哈希表是列表的数组。每个列表称为存储桶。桶的位置通过调用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
比较表
现实生活中的应用
- 假设你正在创建名称到Person对象的映射。你可能需要按名称的字母顺序定期输出人员。 TreeMap使你可以执行此操作。
- TreeMap还提供了一种命名后输出接下来的10个人的方法。对于许多应用程序中的”更多”功能而言, 这可能很有用。
- 每当你需要键的顺序以匹配插入的顺序时, LinkedHashMap就会很有用。当你要删除最早的项目时, 在缓存情况下这可能很有用。
- 通常, 除非有其他原因, 否则将使用HashMap。也就是说, 如果你需要按插入顺序找回密钥, 请使用LinkedHashMap。如果你需要以真实/自然的顺序找回密钥, 请使用TreeMap。否则, HashMap可能是最好的。它通常更快, 所需的开销也更少。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
以上是 Java中的TreeMap、HashMap和LinkedHashMap之间的区别 的全部内容, 来源链接: utcz.com/p/202815.html