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].