java基础:Map
2013-02-17 15:40
381 查看
Map接口
Map接口是一个独立的接口,没有继承Collection接口;接口描述了从不重复的键到值的映射。Map接口中的方法分为五类:查询,修改,块操作,提供视图,比较和希哈
public interface Map<K,V> { // 查询 int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); // 修改 V put(K key, V value); V remove(Object key); // 块操作 void putAll(Map<? extends K, ? extends V> m); void clear(); // 视图 Set<K> keySet(); // 因为key值不允许重复,所以用Set Collection<V> values(); // 而value值是允许重复的,所以用Collection Set<Map.Entry<K, V>> entrySet(); // Map 的 entrySet() 方法返回一个实现 Map.Entry 接口的对象集合。集合中每个对象都是底层 Map 中一个特定的键-值对。 interface Entry<K,V> {//详细介绍:http://zhidao.baidu.com/question/32679780.html K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); } // 比较 希哈 boolean equals(Object o); int hashCode(); }
对于Map接口,在“集合框架”中也有两个常规实现类,和Set接口类似,他们是:
HashMap类
更适合在Map中插入、删除和定位元素。
使用
HashMap要求添加的键类明确定义了
hashCode()实现。
TreeMap类
适合按顺序遍历键。有了
TreeMap实现,添加到映射的元素一定是可排序的。
实例:
public class Demo { public static void main(String[] args) throws Exception { String[] arg={"zhang","jin","yu","is","zhang","yun","yuan's","borather","and","is","wang","qi's","husband"}; Map map=new HashMap<>(); Integer ONE=new Integer(1); for(int i=0, n=arg.length; i<n; i++){ String key=arg[i]; Integer frequency=(Integer)map.get(key); if(frequency==null){ frequency=ONE; }else{ int value=frequency.intValue(); frequency=new Integer(value+1); } map.put(key, frequency); } System.out.println(map); Map sorted_map=new TreeMap(map); System.out.println(sorted_map); } } 运行结果: {jin=1, is=2, yu=1, qi's=1, yuan's=1, zhang=2, yun=1, borather=1, husband=1, wang=1, and=1} {and=1, borather=1, husband=1, is=2, jin=1, qi's=1, wang=1, yu=1, yuan's=1, yun=1, zhang=2} 结果分析: 当map中已经有一个Key为“zhang”时,再往其中添加Key值为“zhang”的key-value对会覆盖之前的。
为了优化
HashMap空间的使用,可以调优初始容量和负载因子。这个
TreeMap没有调优选项,因为该树总处于平衡状态(和Set中一样)。
AbstractMap类(抽象类)
AbstrctMap类也覆盖了equals()和
hashCode()方法,以确保两个相等映射返回相同的散列码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。按定义,映射的散列码是映射元素散列码的总和,其中每个元素是
Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的散列码。
相关文章推荐
- Java基础学习总结(116)——Map使用相关问题总结
- 黑马程序员——Java基础---集合(Set及Map)
- Java基础---集合框架四(Map)
- JAVA SE 基础复习-核心库-Map---java.util
- 黑马程序员_java基础_集合(泛型、Map)
- 黑马程序员_Java基础_集合框架成员Map
- java基础-- 集合框架 之 Map集合
- 复习java基础第四天(集合:List、Map、Collections、Enumeration)
- 黑马程序员-------Java基础-------集合之Map
- 黑马程序员--Java基础学习笔记【集合-Map】
- JAVA基础-Collection中List,Set,Map的比较总结
- 黑马程序员—————Java基础----集合(二)set、map等
- Java基础知识强化之集合框架笔记65:Map集合之集合多层嵌套的数据分析
- Java基础-Map概述与子类对象特点、共性方法
- java基础--Set, List和Map简介
- 【Java基础之】Map存储颜色
- Java基础知识Set、List、Map的区别
- Java基础学习总结(13)---map、list总结
- Java中各类Map的运用及方法 Collections接口中的静态方法(基础解析)
- java基础36 双例集合Map下的HashMap和TreeMap集合