Map—Java

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)  :移除:返回移除前的值

 

 

 

 

 

  • Modifier and Type
  • Method and Description
  • void
  • clear()
  • 从该地图中删除所有的映射(可选操作)。
  • default V
  • compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
  • 尝试计算指定键的映射及其当前映射的值(如果没有当前映射, null )。
  • default V
  • computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
  • 如果指定的键尚未与值相关联(或映射到 null ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非 null 。
  • default V
  • computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
  • 如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。
  • boolean
  • containsKey(Object key)
  • 如果此映射包含指定键的映射,则返回 true 。
  • boolean
  • containsValue(Object value)
  • 如果此地图将一个或多个键映射到指定的值,则返回 true 。
  • Set<Map.Entry<K,V>>
  • entrySet()
  • 返回此地图中包含的映射的Set视图。
  • boolean
  • equals(Object o)
  • 将指定的对象与此映射进行比较以获得相等性。
  • default void
  • forEach(BiConsumer<? super K,? super V> action)
  • 对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。
  • V
  • get(Object key)
  • 返回到指定键所映射的值,或 null如果此映射包含该键的映射。
  • default V
  • getOrDefault(Object key, V defaultValue)
  • 返回到指定键所映射的值,或 defaultValue如果此映射包含该键的映射。
  • int
  • hashCode()
  • 返回此地图的哈希码值。
  • boolean
  • isEmpty()
  • 如果此地图不包含键值映射,则返回 true 。
  • Set<K>
  • keySet()
  • 返回此地图中包含的键的Set视图。
  • default V
  • merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
  • 如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。
  • V
  • put(K key, V value)
  • 将指定的值与该映射中的指定键相关联(可选操作)。
  • void
  • putAll(Map<? extends K,? extends V> m)
  • 将指定地图的所有映射复制到此映射(可选操作)。
  • default V
  • putIfAbsent(K key, V value)
  • 如果指定的键尚未与某个值相关联(或映射到 null )将其与给定值相关联并返回 null ,否则返回当前值。
  • V
  • remove(Object key)
  • 如果存在(从可选的操作),从该地图中删除一个键的映射。
  • default boolean
  • remove(Object key, Object value)
  • 仅当指定的密钥当前映射到指定的值时删除该条目。
  • default V
  • replace(K key, V value)
  • 只有当目标映射到某个值时,才能替换指定键的条目。
  • default boolean
  • replace(K key, V oldValue, V newValue)
  • 仅当当前映射到指定的值时,才能替换指定键的条目。
  • default void
  • replaceAll(BiFunction<? super K,? super V,? extends V> function)
  • 将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。
  • int
  • size()
  • 返回此地图中键值映射的数量。
  • Collection<V>
  • values()
  • 返回此地图中包含的值的Collection视图。

不关心原有的值,只是想覆盖,用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集合

//1MapSet

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());

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值