hashMap,currentHashMap的底层实现原理后面说,记得看
Map接口是Java中保存二元偶对象(键值对)的最顶层接口
public interface Map<K,V> @since1.2
key值唯一,通过一个key值一定能唯一找到一个value值。
Map接口中的核心方法
V put(K key,V value);:向Map中添加数据
V get(Object key);:根据指定的key值取得相应的value值,若没有此key值,则返回null
Set<K> keySet();:返回所有的key值集合,key不能重复 返回set集合
Collection<V> values();:返回所有的value值,value可以重复
Set<Map.Entry<K,V>> entrySet();:将Map集合变为Set集合
remove(Object key) :移除:返回移除前的值
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不关心原有的值,只是想覆盖,用put就够了
Map接口中有如下4个常用子类:
HashMap(使用频率最高,必考)、TreeMap、HashTable、ConcurrentHashMap
Map接口的使用
HashMap<Integer,String>hashMap=newHashMap<>();
hashMap.put(1,"zhangsan");
//key值重复,再次put变为相应value的更新操作
hashMap.put(1,"wangwu");
hashMap.put(2,"zhangsan");
hashMap.put(3,"hajf");
hashMap.put(null,null);
hashMap.put(5,null);
hashMap.put(null,"hahaha");
hashMap.put(null,"hajf");
hashMap.put(9,null);
hashMap.put(null,null);
System.out.println(hashMap);
结果:{null=null, 1=wangwu, 2=zhangsan, 3=hajf, 5=null, 9=null}
key值重复,再次put变为相应value的更新操作
HashMap:(类比HashSet)
1、@since1.2
2、允许key与value为null,且key值有且只有一个为null,value可以有任意多个为null
3、异步处理,效率高,线程不安全
4、底层哈希表+红黑树(红黑树时JDK8才加上的)
HashTable:(古老类)
1、@sinceJDK1.0
2、key与value均不为null
3、使用方法上加锁,效率低,线程安全
4、底层哈希表
HashTable:
JDK1.0提供有三大主要类:Vector、Enumeration、Hashtable。Hashtable是最早实现这种二元偶对象数据结
构,后期的设计也让其与Vector一样多实现了Map接口而已。
HashSet的add方法:
TreeSet的add方法:
HashSet本质上就是HashMap,存放在了key值上,所以Set不允许重复(现有map再有set),value是一个Object对象
Set接口:不允许数据重复(Set接口就是value值相同的map集合,先有Map才有Set)
HashSet就是HashMap
TreeSet就是TreeMap
HashMap如何区分key值重复:equals和hashcode
TreeMap如何区分key值重复:实现comparable或传入比较器。与TreeSet完全一致
TreeSet判断元素重复用的接口:Comparable接口与Compartor接口
Map中的Entry接口:
实际上Map中保存的都是一个个的Entry对象
Map集合如何输出?
Map集合使用迭代器(Iterator与collection接口有关)输出
所有类集的标准输出:Iterator
Set<Map.Entry<K,V>> entrySet();:将Map集合变为Set集合
//输出Map集合
//1、Map转Set
Set<Map.Entry<Integer,String>>set=map.entrySet();
//2、取得Set接口迭代器
Iterator<Map.Entry<Integer,String>>iterator=set.iterator();
//3、迭代输出
while(iterator.hasNext()){
Map.Entry<Integer,String>entry=iterator.next();
System.out.println(entry.getKey()+"="+entry.getValue());