Java 基础:集合框架之 Map
前言
Map 接口的层次结构图:
Map 集合概述
Map 与 Collection 无继承关系。
Map 集合以 Key 和 Value 的方式存储数据。(键值对)
Key 和 Value 是引用数据类型。Key 和 Value 存储对象的内存地址。
所有 Map 集合的 key 特点:无序不可重复的。
Map 集合的 key 和 Set 集合存储元素特点相同。
Map 接口常用的方法:
void clear() 清空集合中的元素
boolean containsKey(Object key) 判断Map中是否包含某个Key
boolean containsValue(Object value) 判断Map中是否包含某个Value
V get(Object key) 通过Key获取Value
boolean isEmpty() 判断Map中元素是否为0
V put(K key, V value) 向集合中添加键值对
V remove(Object key) 通过Key删除键值对
int size() 获取Map集合中的元素个数
Collection<V> values() 获取集合Map中所有的Value,返回一个Collection
下面两个方法用于遍历 Map 集合:
Set<K> keySet() 获取Map所有的Key
Set<Map.Entry<K,V>> entrySet() 将Map集合转换为Set集合。
示例代码(1):
运行结果:
示例代码(2):
遍历 Map 集合
Set<K> keySet() 获取Map所有的Key
运行结果:
Set<Map.Entry<K,V>> entrySet() 将Map集合转换为Set集合。
运行结果:
HashMap 类:
HashMap 底层时哈希表数据结构-HashMap 非线程安全。
放在 HashMap 集合 Key 部分的元素其实是放在 HashSet 中了(须重写 hashCode 和 equals 方法)
Java集合框架详述之(Collection,List,Set)
HashMap 的 Key 部分特点:无序,不可重复。
HashMap 初始化容量为 16,默认加载因子为 0.75
默认加载因子表示/;当 HashMap 集合底层数组容量到 75%时,开始扩容
扩容机制:扩容为原容量的 2 倍
注:HashMap 集合初始化容量必须为 2 的倍数,因为达到散列均匀,为了提高 HashMap 集合存取效率。
JDK8 之后新特性:
在 JDK8 之后,如果哈希表单向链表中元素超过 8 个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量小于 6 时,会重新把红黑树变成单向链表数据结构这种方式也是为了提高检索效率,二叉树的检索会再次缩小扫描范围。提高效率。
HashMap 集合的 key 和 value 允许 null(HashMap 的 key 为 null 只能有一个)
HashMap 与 Hashtable 区别?
HashTable 的 Key 和 value 都不可以为 nullHashMap 的 Key 和 value 都可以为 nullHashTable 是线程安全的,使用较少底层也是哈希表数据结构,初始化容量为 11,加载因子为 0.75 扩容为:原容量*2+1;
示例代码(3):
运行结果:
Properties 属性类
继承 Hashtable,Key 和 Value 都是 String 类型
Properties 是线程安全的。
Properties 两个常用方法:
Object setProperty(String key, String value)
存元素String getProperty(String key)
通过 key 获取 value
示例代码(4):
运行结果:
TreeMap 类
TreeMap 底层是二叉树。
无序,不可重复但是可以按照大小顺序进行排序,称为:可排序集合
放到 TreeMap 集合中的 Key 部分的元素等同于放到 TreeSet 集合中
示例代码(5):
运行结果:
Collections 工具类
常用方法汇总:
static <T> Collection<T> synchronizedCollection(Collection<T> c)
返回由指定集合支持的同步(线程安全)集合。static <T> List<T> synchronizedList(List<T> list)
返回由指定列表支持的同步(线程安全)列表。static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
返回由指定的 Map 支持的同步(线程安全)Map。static <T> void sort(List<T> list, Comparator<? super T> c)
根据指定的比较器指定的顺序对指定的列表进行排序。
示例代码(6):
运行结果:
版权声明: 本文为 InfoQ 作者【百思不得小赵】的原创文章。
原文链接:【http://xie.infoq.cn/article/c58d0911e234e4bfb8dbad4e6】。文章转载请联系作者。
评论