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

一、类型介绍

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> entrySet() 返回此映射中包含的映射关系的 Set 视图。

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

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

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

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

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

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

void putAll(Map m)从指定映射中将所有映射关系复制到此映射中(可选操作)。

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

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

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

四、遍历

// 1.声明一个Map 

 Map m=new HashMap();

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

Object value = map.get(obj);

}


你可能感兴趣的:(JAVA:Set/List/Map 集合之Map(三))