首页 > 代码库 > HashMap,TreeMap比较

HashMap,TreeMap比较

1.两种常规Map实现 
HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 
(1)HashMap(): 构建一个空的哈希映像  
(2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射  
(3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像  
(4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像  

TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。  
(1)TreeMap():构建一个空的映像树  
(2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素  
(3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序  
(4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序   
2.两种常规Map性能  
HashMap:适用于在Map中插入、删除和定位元素。  Treemap:适用于按自然顺序或自定义顺序遍历键(key)。   

3.总结 

HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

package com.wzs;

import java.util.*;

public class MapTest {
	public static void main(String[] args) {
		// 由HashMap实现的Map对象
		Map<String, String> map = new HashMap<String, String>();
		Emp emp = new Emp("001", "张三");
		Emp emp2 = new Emp("005", "李四"); // 创建Emp对象
		Emp emp3 = new Emp("004", "王一");
		map.put(emp.getE_id(), emp.getE_name());
		map.put(emp2.getE_id(), emp2.getE_name()); // 将对象添加到集合中
		map.put(emp3.getE_id(), emp3.getE_name());

		Set<String> set = map.keySet(); // 获取Map集合中的key对象集合
		Iterator<String> it = set.iterator();
		System.out.println("HashMap类实现的Map集合,无序:");
		while (it.hasNext()) {
			String str = (String) it.next();
			String name = (String) map.get(str); // 遍历map集合
			System.out.println(str + " " + name);
		}

		// 创建TreeMap集合对象
		TreeMap<String, String> treemap = new TreeMap<String, String>();
		treemap.putAll(map); // 向集合添加对象
		Iterator<String> iter = treemap.keySet().iterator();
		System.out.println("TreeMap类实现的Map集合,键对象升序:");
		while (iter.hasNext()) { // 遍历TreeMap集合对象
			String str = (String) iter.next(); // 获取集合中的所有key对象
			String name = (String) map.get(str); // 获取集合中的所有values值
			System.out.println(str + " " + name);
		}
	}
}
输出结果:HashMap类实现的Map集合,无序:
004 王一
005 李四
001 张三
TreeMap类实现的Map集合,键对象升序:
001 张三
004 王一
005 李四