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 李四

HashMap,TreeMap比较

时间: 2024-10-14 08:44:27

HashMap,TreeMap比较的相关文章

JAVA基础学习day16--集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

HashTable HashMap TreeMap LinkedHashMap 区别

参考:http://blog.csdn.net/xiaodifa995455120/article/details/7277441 http://www.apkbus.com/forum.php?mod=viewthread&tid=52426 Hashmap 是一个 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个

HashMap TreeMap

用HashMap存储信息. //HashMap System.out.println("------HashMap无序输出------"); HashMap<String,String> hsMap=new HashMap<String,String>(); hsMap.put("3", "Value3"); hsMap.put("1", "Value1"); hsMap.put(&

HashMap TreeMap ConcurrentHashMap 源码

1 HashMap java se 1.6 1.1 父类 java.lang.Object 继承者 java.util.AbstractMap<K,V> 继承者 java.util.HashMap<K,V> 类型参数: K - 此映射所维护的键的类型 V - 所映射值的类型 所有已实现的接口: Serializable, Cloneable, Map<K,V> 直接已知子类: LinkedHashMap, PrinterStateReasons 1.2 类定义 publ

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

HashMap,TreeMap以及LinkedHashMap的区别

HashMap:HashMap数据是无序的,根据键的hashCode进行数据的存取,对数据的访问速度非常快,在map中插入删除 和定位元素,hashMap无疑是最好的选择, TreeMap:里面的数据是有序的,底层是一个红黑树,如果想按照自定义顺序或者自然顺序存储数据,TreeMap是一个最好的选择 LinkedHashMap:他是hashMap的一个子类,底层维护了一个双向链表,他可以实现输入的顺序和输出的顺序相同 下面来讲讲LinkedHashMap是如何实现有序的: LinkedHashM

高并发第九弹:逃不掉的Map --&gt; HashMap,TreeMap,ConcurrentHashMap

平时大家都会经常使用到 Map,面试的时候又经常会遇到问Map的,其中主要就是 ConcurrentHashMap,在说ConcurrentHashMap.我们还是先看一下, 其他两个基础的 Map 类: HashMap  和 TreeMap HashMap: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable,Serializable { // 这里有个很逗

对比hashtable,hashmap,treemap的区别

一:hashtable线程安全,不支持null键和值,hashmap支持null键和值,treemap是红黑树实现的,可以通过key的comparotor实现排序,还有原始类型的自然顺序,它的get,remove,add都是logn时间复杂度 二:hashmap 的实现原理,负载因子,容量,多线程导致的循环占用cpu,size不准确 三: 四:用到集合的时候一定要考虑自己创建的对象是否需要从新实现equals和hashcode方法.如果用到hashmap,一定要注意这俩个方法.这俩个都要实现,不

对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解

都实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值. 1.初始化的时候:HashTable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂:HashMap默认的容量为16,且要求容量一定为2的整数次幂. 2.HashTable,HashMap具有无序特性.TreeMap是利用红黑树实现的,实现了SortMap接口,能够根据保存的键的记录进行排序.所以需要使用排序则选择TreeMap,默认为升序排序,

HashMap TreeMap LinkedHashMap

HashMap 键是Student值 是String 的案例 键是Student, 如果不重写,则键肯定不一致, 所以需要重写键对象的hashcode() equals() LinkedHashMap 底层是链表,怎么存怎么取 TreeMap 键如果是自定义对象,则该对象必须有比较的功能 public class demon7_hashmapHashMap { /* * 嵌套HashMap * 键是学生 值是学生归属地 * 有多个班级 键是班级 值是班级号 */ public static vo