Java中HashMap和TreeMap之间的区别
Java中的HashMap和TreeMap
首先,我们将看到TreeMap与Java中的HashMap有何不同?
TreeMap树图
此类在java.util包中可用。
此类是Map接口的实现类。
TreeMap的基础数据结构是RED-BLACK树。
在TreeMap中,不会保留“元素的插入顺序”,因为将根据键的某些排序顺序插入元素(此处将根据键进行排序)。
在TreeMap中,对象表示为一组作为键值对的元素。
在TreeMap中,键“不能重复插入”(即,不允许插入键的重复元素)。
在TreeMap中,值可以“重复插入”(即,允许为值插入重复元素,或者对值没有限制)。
在TreeMap中,排序将分为两种类型:
默认自然排序(升序)
自定义排序(升序或降序)
在默认情况下,自然排序的“TreeMap关键字”应该是同质且可比较的。
在自定义排序中,“TreeMap键”不必是同质的和可比较的。
在TreeMap中,将键作为第一个元素“可以插入空”,换句话说,如果我们将在第一个元素之后插入null,则将获得异常。
在TreeMap中,非空Map的键“不可能插入空”。
示例
//Java程序演示TreeMap的行为
import java.util.*;
class TreeMapClass {
public static void main(String[] args) {
//创建TreeMap的实例
TreeMap tm = new TreeMap();
//通过put()在TreeMap中添加元素
tm.put(1, "Java");
tm.put(3, "C");
tm.put(2, "C++");
tm.put(4, "Java");
tm.put(6, null);
tm.put(7, 10);
tm.put(2, "Ruby");
/* tm.put("Java" , "is a programming");
Here hetrogenous object is not allowed for keys */
/* tm.put(null , "Python");
Here null insertion for keys is not
possible for non-empty TreeMap */
/* tm.put(2 , "Ruby");
Here we will not get any exception but
only one will be considerable */
//显示当前TreeMap-
System.out.println("Display Current TreeMap is :" + tm);
}
}输出结果
E:\Programs>javac TreeMapClass.java
E:\Programs>java TreeMapClass
Display Current TreeMap is :{1=Java, 2=Ruby, 3=C, 4=Java, 6=null, 7=10}其次,我们将看到HashMap与Java中的TreeMap有何不同?
HashMap哈希映射
此类在java.util包中可用。
此类是Map接口的实现类。
HashMap的基础数据结构是Hashtable。
HashMap是LinkedHashMap的父级。
在HashMap中,“元素的插入顺序”未保留,因为将根据某些键的hashCode插入元素(即,插入顺序不必与检索顺序相同)。
在HashMap中,对象表示为一组作为键值对的元素。
在HashMap中,键“不能重复插入”(即不允许插入键的重复元素)。
在HashMap中,值可以“重复插入”(即,允许为值插入重复元素,或者对值没有限制)。
在HashMap中,键和值“可以空插入”,但键一次,值多个。
在HashMap中,键和值均允许使用“异构对象”。
示例
//Java程序演示HashMap的行为
import java.util.Collection;
import java.util.HashMap;
class HashMapClass {
public static void main(String[] args) {
//创建一个HashMap的实例
HashMap hm = new HashMap();
//通过使用put()方法在HashMap中添加一些值
hm.put("Java", 1000);
hm.put("C", 2000);
hm.put("C++", 3000);
hm.put("Ruby", 4000);
hm.put("Python", 1000);
hm.put("null", null);
hm.put("Django", null);
/* hm.put("null",null);
这里我们不会得到任何错误,但是键接受一个空值*/
//显示HashMap的检索顺序
System.out.println("Current HashMap list is :" + hm);
//通过使用values()查找HashMap的值
Collection values = hm.values();
//显示HashMap的值
System.out.println("Current HashMap Key values is :" + values);
}
}输出结果
E:\Programs>javac HashMapClass.java
E:\Programs>java HashMapClass
Current HashMap list is :{Ruby=4000, C=2000, Django=null, Python=1000,
C++=3000, null=null, Java=1000}
Current HashMap Key values is :[4000, 2000, null, 1000, 3000, null, 1000].