本文概述
- HashMap
- LinkedHashMap
- 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值。
- 它保持没有命令.
语法如下:
public class LinkedHashMap extends HashMap
0implements Map
- LinkedHashMap包含基于键的值。
- 它仅包含唯一元素。
- 它可能具有一个null键和多个null值。
- 与HashMap相同维持广告订单.
语法如下:
public class TreeMap extends AbstractMap implements
NavigableMap, Cloneable, Serializable
- TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
- 它仅包含唯一元素。
- 它不能有空键, 但可以有多个空值。
- 与HashMap相同保持升序(按其键的自然顺序排序)。
“Hashtable”是基于散列的映射的通用名称。
语法如下:
public class Hashtable extends Dictionary implements
Map, Cloneable, Serializable
- 哈希表是列表的数组。每个列表称为存储桶。桶的位置通过调用hashcode()方法来标识。哈希表包含基于键的值。
- 它仅包含唯一元素。
- 它可能没有任何空键或值。
- 已同步。
- 这是一个遗留类。
//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 TreeMapimport 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可能是最好的。它通常更快, 所需的开销也更少。
推荐阅读
- 静态和动态SQL之间有什么区别()
- ELkStack集群核心概念 #yyds干货盘点#
- #yyds干货盘点#k8s集群中的控制器
- DBeaver安装完成使用时下载驱动报错
- #yyds干货盘点#Linux显示或管理路由表
- #yyds干货盘点# 数据结构与算法学习——单链表相关算法
- #yyds干货盘点#netty系列之:channel,ServerChannel和netty中的实现
- MySQL数据库——日志管理备份与恢复
- #yyds干活盘点# 4.3 HTML5 MathML