zoukankan      html  css  js  c++  java
  • Map 和Map.Entry的学习

    在看项目的时候,看到这样的代码:

    List<Instance> instances = new ArrayList<Instance>();
    instances =impl.selectInstacne();
    Map<Integer,Instance> map = new HashMap<Integer,Instacne>();
    List<Integer> itemids = new ArrayList<Integer>();
    if(instances.size()>0){
    for(Instacne instance:instances){
    int itemID = instance.getItemId();
    map.put(itemID, instance);
    itemids.add(itemID);
    }
    Map<Integer,Integer> items = OtherImpl.getItemValueById(itemids);
    for(Map.Entry<Integer,Integer> entry:items.entrySet()){
    int item = entry.getKey();
    int val = entry.getValue();
    map.get(item).setStatus(val);
    }

    Impl.updateAllInstance(instances);
    }

    代码中使用了Map和Map.Entry的例子,觉得写的很简洁,效率也很高。(map 中的遍历使用hashCode(),散列码,而不是索引,这样访问速度极快)

    此代码功能:实现更新所有实例的status属性。

    1、通过遍历instance,初始化map,使每个itemID对应一个instance对象,并将itemID存放在一个list中

    2、重新获得item结合中每个item的值,存在一个Map 中(items)

    3、遍历items,找到items中每个条目的键(item)和值(value),再将原来map中键(item)对应的值(value)进行重新设置。

    以前没有见过这种写法,学习到了,用map修改值,避免了使用for循环(双重循环进行比较),大大提高了程序效率。

    知识点:

    Map:接口,键值对,若value为封装的基本类型对象,则不能改变值(或通过Map.Entry来改变值),若为类类型,则可以通过找到值,在调用值(value)的set方法,改变值;

    Map.Entry :接口,是Map的嵌套类,A map entry (key-value pair). 单个键到值的映射,可以改变map中value的值(setValue())

    可通过 Set<>map.EntrySet()获得Map.Entry()的实例。

     Map.Entry接口
      Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。

      通过这个集合的迭代器,您可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。


    用Iterator 迭代器进行遍历

    Itetrator  it=map.entrySet().iterator();

    while(it.haseNext()){

    Map.Entry<Integer,Integer> entry=(Map.Entry<Integer,Integer>)it.next();

    entry.getKey();

    entry.getValue();

    }


  • 相关阅读:
    《转》MFC六大关键技术之(五)(六)——消息映射与命令传递
    《转》MFC六大关键技术之(四)——永久保存(串行化)
    《转》MFC六大关键技术之(三)——动态创建
    《转》MFC六大关键技术之(二)——运行时类信息(RTTI)
    《转》MFC六大关键技术之(一)—— 初始化过程
    C++ 语言的 15 个晦涩特性
    QT的项目管理文件pro的编写
    使用C++编写的一个Find(查找)对话框例子
    如何让Fedora能够打开RAR文件
    Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
  • 原文地址:https://www.cnblogs.com/yeemi/p/7470188.html
Copyright © 2011-2022 走看看