Java教程

HashMap与TreeMap之间的区别

Java HashMap</strong>和 TreeMap</strong>都是Java Collections 框架的类。 Java Map实现通常充当存储桶的哈希表。当存储桶太大时,它们将转换为 TreeNodes 的节点,每个节点的结构与 java.util.TreeMap</strong>中的节点类似。

HashMap</h2>
HashMap实现了 Map<K,V>,Cloneable Serializable 接口。它扩展了 AbstractMap<K,V> 类。它属于 java.util 软件包。
HashMap包含基于键的值。 它可能只有一个null键和多个null值。 HashMap在迭代时不维护顺序。 它包含独特的元素。 它遵循哈希原理。

TreeMap</h2>
TreeMap类扩展了 AbstractMap<K,V> 类并实现了 NavigableMap<K,V> 可克隆可序列化接口。 TreeMap是 SortedMap</strong>的示例。它由Red-Black树实现,这意味着键的顺序已排序。
TreeMap还包含基于键的值。 TreeMap按键排序。 它包含独特的元素。 它不能具有null键,但可以具有多个null值。 键按升序排列。 它将对象存储在树形结构中。

HashMap和TreeMap之间的相似之处

HashMap</strong>和 TreeMap</strong>类实现 Cloneable Serializable 接口。 这两个类都扩展了 AbstractMap<K,V> 类。 Map是存储键值对的对象。在键值对中,每个键都是唯一的,但它们的值可能会重复 两个类均表示从的映射。 两个Map均未同步 Map使用 put()方法在Map中添加元素。 如果Map以任何方式修改,则迭代器将引发 ConcurrentModificationException
HashMap和TreeMap之间的主要区别是:
HashMap</strong>不保留迭代顺序,而 TreeMap</strong>保留顺序通过使用 compareTo()方法或在TreeMap的构造函数中设置的比较器
下表描述了HashMap和TreeMap之间的区别。 与HashMap相比,
HashMap</td> TreeMap</td>
Java HashMap</strong>是基于哈希表的Map接口实现。 Java TreeMap</strong>是Map接口的基于树结构的实现。
HashMap实现了 Map,Cloneable Serializable 接口。 TreeMap实现了 NavigableMap,Cloneable Serializable 接口。
HashMap允许单个空键和多个空值。 TreeMap不允许 null 键,但是可以具有多个 null值。
HashMap允许使用异构元素,因为它不对键执行排序。 由于排序,TreeMap允许将齐次值作为键。
HashMap比TreeMap<strong>更快,因为它为诸如get()和put()之类的基本操作提供的恒定时间性能为O(1)。 TreeMap的速度,因为它为大多数操作(如add(),remove()和contains())提供O(log(n))的性能。
HashMap类使用哈希表 TreeMap在内部使用 Red-Black 树,这是一种自平衡二进制搜索树。
它使用 Object 类的 equals()方法比较键。 Map类的equals()方法将其覆盖。 它使用 compareTo()方法比较键。
HashMap类仅包含基本功能,例如 get(),put(),KeySet()等。 TreeMap类具有丰富的功能,因为它包含以下功能: tailMap(),firstKey(),lastKey(),pollFirstEntry(),pollLastEntry()
HashMap不维护任何顺序。 元素以自然顺序(升序)排序。
当我们不需要按排序顺序的键值对时,应使用HashMap。 当我们需要按排序(升序)顺序排列的键值对时,应使用TreeMap。

HashMap与TreeMap的示例

在以下示例中,我们可以观察到HashMap的元素是随机顺序的,而TreeMap的元素是排列的升序。
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
public class HashMapVsTreeMapExample{
    public static void main(String args[]){
        Map<Integer, String> hm=new HashMap<Integer, String>();
        hm.put(9, "Red");
        hm.put(12, "Black");
        hm.put(6, "Green");
        hm.put(19, "White");
        System.out.println("HashMap iteration Order:");
        for(Map.Entry<Integer, String>entry: hm.entrySet()){
            System.out.println(entry.getKey() + " = " +entry.getValue());
        }
        Map<Integer, String> tm=new TreeMap<Integer, String>();
        tm.put(9, "Red");
        tm.put(12, "Black");
        tm.put(6, "Green");
        tm.put(19, "White");
        System.out.println("TreeMap iteration Order:");
        for(Map.Entry<Integer, String>entry: tm.entrySet()){
            System.out.println(entry.getKey() + " = " +entry.getValue());
        }
    }
}
输出:
HashMap与TreeMap之间的区别
昵称: 邮箱:

Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4