Map 接口
- Collection 接口是单列集合的规范
- Map 接口是双列集合的规范,一个元素包含两个值:<key, value>
- key不可以重复,value可以重复
- key与value 一 一对应。
常用的方法
方法 | 作用 |
---|---|
V put(key, value) | 把value放到Map集合中,如果key重复了,替换掉原先的value并返回替换前的V,如果没有重复,返回null |
V remove(key) | 把指定的key从Map中删除,返回被删除的元素 |
V get(key) | 由key获取value |
Set < k > keySet() | 获取所有key,存到一个Set中 |
常用的遍历
- 先取出所有key:
Set<E> set = map.keySet();
- 迭代
Iterator <E> it = set.iterator();
也可以用增强的for循环。
在IDEA中,可以使用
集合名.fori
来快速生成一个增强for
- 也可以这样:直接在for中取出keySet:
for ( K key : map.keySet()){ ... }
Entry
是Map的内部接口
** 代表着key与value之间的对应关系,每个Key与Value之间,是用Entry连接起来的。 **
获取Entry的方法:
Set < Map.Entry<K,V>> set = map.entrySet();
可以把Map中的所有Entry取出存储到一个Set中。
得到EntrySet之后,可以迭代:
例如:for ( Map.Entry<K,V> entry : set ) {sout(entry.getKey() + entry.getValue());}
HashMap
来自java.util包
-
是一个无序的集合。
-
底层是哈希表,查询快。
-
在JDK1.8之后,结构是单向链表+红黑树(单个链条上超过8个元素时)
LinkedHashMap
- 底层是哈希表+链表,可以进行有序的迭代。
HashTable
类似于HashMap,但是属于早期版本(JDK1.0),与HashMap的主要区别是Key或Value不支持null
- 底层是哈希表,查询快
- 单线程(线程安全,速度慢)
- 已被HashMap取代,但其子类Properties依然活跃。
Vector 已经被ArrayList 取代。