Java集合——映射

        集允许快速查找现有元素,但查找一个元素需要有准确地址,而映射提供了查找元素相关联的元素,映射(map)存放键值对

映射基本操作

        Java库中为映射提供了两个通用实现:HashMap和TreeMap,两个类都实现了Map接口。

        散列映射对键进行散列,树映射根据键的顺序将它们组织为一个搜索树,两者选择的依据在于,散列更快一些,如果不需要按照有序顺序访问键,最好选择散列映射。

        示例:建立散列映射存储员工信息

        

var staff = new HashMap<String,Employee>();
var harry = new Employee("Harry Hacker");
staff put("987-98-9996",harry);

                如程序所示,每向映射中添加一个对象时,必须同时提供一个键。

        获取一个对象时需要使用键,例如:

var id = "987-98-9996";
Employee e = staff.get(id);

        如果映射中没有存储与键对应的值,则get方法返回null,也可以使用getOrDwfault方法

        

var id = "987-98-9996";
Employee e = staff.getOrDefault(id,0);//不存在键值时返回0

        键是唯一的,不能对同一个键存放两个值,若对同一个键调用两次put方法,则第二个值会取代第一个值,实际上,put将返回与这个键参数关联的上一个值。

        remove方法从映射中删除给定键对应的元素,size方法返回映射中的元素数。

        迭代处理映射中的键和值,最容易方法是使用forEach方法,如下

scores.forEach((k,v) -> System.out.println("key="+k+",value="+v))//使用了lambda表达式

        示例程序:映射的具体用法,首先将键值对添加进入映射,然后从映射中删除一个键,对应的元素也会删除,接下来修改某个键相关的值,并用get方法查找一个值,最后迭代处理元素集。

        

        API:

        1、java.util.Map<K, V> 1.2  

                V get(Object key)---获得与键关联的值 返回与键关联的对象 或者如果在映射中没有找到这个键 ,则返 回 null 实现类可能禁止键为 null
                default V getOrDefault(Object key, V defaultvalue)---获得与键关联的值 返回与键关联的对象 或者如果在映射中没有找到这个键 ,则返回 defaultvalue
                V put(K key, V value) 将关联的一对键和值放到映射中 如果这个键已经存在 ,新对象将取代之前与这个键 关联的对象 这个方法将返回键对应的旧值 如果之前没有这个键 则返回 null 。实 现类可能禁止键或值为 null
                void putAll(Map<? extends K, ? extends V> entries)---将指定映射中的所有映射条目添加到这个映射中
                boolean containsKey(Object key)---如果映射中有这个键 返回 true
                boolean containsValue(Object value)---如果映射中有这个值 返回 true
                default void forEach(BiConsumer<? super K,? super V> action)---对 这个映 射中的所有键 / 值对应用这个 动作
        

更新映射条目        

        处理映射的一个难点是更新映射 条目 正常情况下 可以 得到与一个键关联的旧值 ,更
新这 个值 再放回更新后的值 不过 必须考虑一个特殊情况 即键第一次出现

         

映射视图       

        集合框架不认为映射本身 是一个 集合 (其他数据结构框架 则认为映射是一个键 / 值对集
或者是按键索引的值集 ) 不过 可以得到映射的视图 (view) 实现了 Collection接 口或某个子接口的对象。  
        有3 种视图 键集 值集合(不 是一 个集)以及键 / 值对集 键和键 / 值对可以构成一个
因为映射中一个键只能有一个副本
        3种方法:
        Set<K> keySet()
        Collection<V> values()
        Set<Map.Entry<K,V>> entrySet()分别返回这3个视图,(映射条目集的元素是实现了 Map.Entry 接口的类的对象 )
         注意:keySet不是HashSet或TreeSet,而是实现了Set接口的另外某个类的对象,Set接口扩展了Collection接口,因此可以像使用任何集合一样使用keySet。

 

 

 

 

 

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值