美文网首页
JAVA:Set/List/Map 集合之Map(三)

JAVA:Set/List/Map 集合之Map(三)

作者: 小鱼儿_f32a | 来源:发表于2019-06-20 16:38 被阅读0次

    一、类型介绍

    Java 自带了各种 Map 类。这些 Map 类可归为三种类型:

    1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现

    HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap

    2. 专用Map,通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问

    java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons、java.security.Provider、java.awt.RenderingHints、javax.swing.UIDefaults

    3. 一个用于帮助我们实现自己的Map类的抽象类

    AbstractMap

    二、常见的几个类型的区别

    1 区别

    1.1 基本

    HashMap:初始化容量为16,扩容每次为2*oldCap,key-value可以为NULL值

    Hashtable:初始化容量为11,扩容每次为2*oldCap+1,key-value不可以为NULL值

    TreeMap:初始化容量为0,内部是红黑树结构,不存在hash冲突的情况,不存在扩容的操作,key-value不可以为NULL值

    1.2 实现

    HashMap:实现了Map接口,继承了AbstractMap类

    Hashtable:实现了Map接口,继承了AbstractMap类

    TreeMap:由于TreeMap是有序的,所以其除了实现了Map接口,还实现了SortedMap、NavigableMap接口

    1.3 内部原理

    HashMap:HashMap是散列表实现,内部是数组+链表或者红黑树的结构

    Hashtable:Hashtable也是散列表实现,内部是数组+链表的结构

    TreeMap:TreeMap内部是红黑树的结构

    1.4 线程安全

    HashMap:不是线程安全的,其实通过Map m = Collections.synchronizeMap(hashMap)的方式也可以使得HashMap变成线程安全的,但是这样做对程序的性能可能是噩梦,在后面会介绍ConcurrentHashMap,建议在多线程的情况下可以使用ConcurrentHashMap替换HashMap.

    Hashtable:是线程安全的,内部方法使用关键字synchronized修饰

    TreeMap:不是线程安全的

    三、常见用法

    void clear() 从此映射中移除所有映射关系(可选操作)。

    boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。

    boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。

    Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。

    boolean equals(Object o) 比较指定的对象与此映射是否相等。

    V get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

    int hashCode() 返回此映射的哈希码值。

    boolean isEmpty()  如果此映射未包含键-值映射关系,则返回 true。

    Set<K> keySet()  返回此映射中包含的键的 Set 视图。

    V put(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。

    void putAll(Map<? extends K,? extends V> m)从指定映射中将所有映射关系复制到此映射中(可选操作)。

    V remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

    int size() 返回此映射中的键-值映射关系数。

    Collection<V> values() 返回此映射中包含的值的 Collection 视图。

    四、遍历

    // 1.声明一个Map 

     Map m=new HashMap();

    for(Object obj : map.keySet()){

    Object value = map.get(obj);

    }

    相关文章

      网友评论

          本文标题:JAVA:Set/List/Map 集合之Map(三)

          本文链接:https://www.haomeiwen.com/subject/uxtjqctx.html