Map接口
- 键值对存储
- key保证唯一不能重复
- value可以重复
- 具体的实现类:HashMap,TreeMap,HashTable,LinkedHashMap
方法
方法名 | 功能说明 |
---|
void clar() | 暴力清空Map集合中的元素 |
Map对象.containsKey(key) | 集合中是否存在key,返回boolean类型数据 |
Map对象.get(key); | 根据键找对应的value |
Set<变量类型> 变量名= Map对象.keySet() | 遍历集合,遍历键 |
entrySet() | 遍历集合,便利键值 |
Set<String> keySet= map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key+"="+value);
}
Set<Map.Entry<String ,String>> entry= map1.entrySet();
for (Map.Entry e:entry){
String key = (String) e.getKey();
String value= (String) e.getValue();
System.out.println(key+"="+value);
面试题
hashmap和hashtable区别?
相同:
HashMap和Hashtable都是用hash算法来决定其元素的存储
异同:
1、继承的父类不同
Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
2、从线程安全角度:
①Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不 需要自己为它的方法实现同步
②HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题。使用HashMap时就必须要自己增加同步处理,
虽然HashMap不是线程安全的,但是它的效率会比Hashtable要好很多。
3、从数据结构角度:
①Hashtable底层数组+链表实现。每个元素是一个key-value键值对。但无论key还是value都不能为null
②HashMap底层数组+链表实现。每个元素是一个key-value键值对。且可以接受null(HashMap可以接受为null的键(key)和值(value)
HashMap
- 不保证顺序不变
- 基于哈希表,数组+链表的方式实现+二叉树(红黑树)JDK1.8
- 红黑树结构储存的目的是取值更快,数据量越大,性能表现越明显
- 线程不安全,适合在单线程中使用
TreeMap
HashTable
遍历
table.forEach((key,value)->System.out.println(key+"="+value))