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