「map递归java」map递归遍历

博主:adminadmin 2022-12-05 09:06:06 132

今天给各位分享map递归java的知识,其中也会对map递归遍历进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA 如何把一个局部变量(Map类型的)的值, 取出来返回给调用者?

你的方法中用了递归,所以要注意变量的恰当使用。

MapString,

String

strMap

=

new

HashMapString,

String();这句只要出现递归情况都会执行一次,这样strMap

就会不断引用到新建的HashMap,有一种情况,如果递归遍历中出现的最后一次是一个文件夹并且这个文件夹是空的,那么strMap引用到的HashMap(strMap

=

new

HashMapString,

String();)就会是空的,

java递归问题

用map,key就是你的a1,a2,a3,value就是你的值

递归写的时候就可以取key和value了

java Map 怎么遍历

java Map 遍历一般有四种方式

方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

方式二: 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

方式三:使用Iterator遍历

使用泛型:

不使用泛型:

你也可以在keySet和values上应用同样的方法。

方法四:  通过键找值遍历(效率低)

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。

因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结:

如果仅需要键(keys)或值(values)使用方法二。

如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

扩展资料:

类似的遍历算法:

二叉树的遍历算法

1、先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴ 访问根结点;

⑵ 遍历左子树;

⑶ 遍历右子树。

2、中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

3、后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

参考资料:百度百科——Java

java的递归查询怎么写

原文在这里,写得不错,楼主可参考下,具体链接如下,我只是搬运工!

/** 

    * 说明方法描述:将list转为树tree结构 

    *  

    * @param allRrecords 

    * @return 

    * @time 2016年5月10日 下午6:00:35 

    * @author yangdong 

    */  

   public ListRecord useListRecordToTree(ListRecord allRrecords) {  

  

       ListRecord listParentRecord = new ArrayListRecord();  

       ListRecord listNotParentRecord = new ArrayListRecord();  

       // 第一步:遍历allRrecords保存所有数据的uuid用于判断是不是根节点  

       MapString, String mapAllUuid = new HashMapString, String();  

       MapString, Record allRecordMap = new HashMapString, Record();  

       for (Record record : allRrecords) {  

           mapAllUuid.put(record.getStr("uuid"), record.getStr("uuid"));  

           allRecordMap.put(record.getStr("uuid"), record);  

       }  

       // 第二步:遍历allRrecords找出所有的根节点和非根节点  

       if (allRrecords != null  allRrecords.size()  0) {  

           for (Record record : allRrecords) {  

               if (StringUtil.isBlank(record.getStr("parent_uuid"))  

                   || !mapAllUuid.containsKey(record.getStr("parent_uuid"))) {  

                   listParentRecord.add(record);  

               } else {  

                   listNotParentRecord.add(record);  

               }  

           }  

       }  

  

       // 第三步: 递归获取所有子节点  

       if (listParentRecord.size()  0) {  

           for (Record record : listParentRecord) {  

               // 添加所有子级  

               record.set("childs", this.getTreeChildRecord(listNotParentRecord, record.getStr("uuid")));  

           }  

       }  

       return listParentRecord;  

   }  

  

   /** 

    * 说明方法描述:使list转换为树并根据关键字和节点名称过滤 

    *  

    * @param allRecords 所有节点 

    * @param keywords 要过滤的关键字 

    * @param filterFields 要过滤的字段 

    * @return 

    * @time 2016年5月19日 下午3:27:32 

    * @author yangdong 

    */  

   public ListRecord useListRecordToTreeByKeywords(ListRecord allRecords, String keywords, String... filterFields) {  

       ListRecord listRecord = new ArrayListRecord();  

       MapString, Record allRecordMap = new HashMapString, Record();  

       for (Record record : allRecords) {  

           allRecordMap.put(record.getStr("uuid"), record);  

       }  

       // 遍历allRrecords找出所有的nodeName和关键字keywords相关的数据  

       if (allRecords != null  allRecords.size()  0) {  

           if (filterFields.length  1) {  

               for (Record record : allRecords) {  

                   for (String field : filterFields) {  

                       // 比较  

                       if (record.getStr(field).toLowerCase().indexOf(keywords.toLowerCase()) != -1) {  

                           listRecord.add(record);  

                       }  

                   }  

               }  

           } else {  

               for (Record record : allRecords) {  

                   // 比较  

                   if (record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase()) != -1) {  

                       listRecord.add(record);  

                   }  

               }  

           }  

       }  

       // 查找过滤出来的节点和他们的父节点  

       listRecord = this.getSelfAndTheirParentRecord(listRecord, new ArrayListRecord(),  

                                                     new HashMapString, Record(), allRecordMap);  

       // 将过滤出来的数据变成树tree结构  

       listRecord = this.useListRecordToTree(listRecord);  

       return listRecord;  

   }  

  

   /** 

    * 说明方法描述:递归查询子节点 

    *  

    * @param childList 子节点 

    * @param parentUuid 父节点id 

    * @return 

    * @time 2016年5月10日 下午3:29:35 

    * @author yangdong 

    */  

   private ListRecord getTreeChildRecord(ListRecord childList, String parentUuid) {  

       ListRecord listParentRecord = new ArrayListRecord();  

       ListRecord listNotParentRecord = new ArrayListRecord();  

       // 遍历tmpList,找出所有的根节点和非根节点  

       if (childList != null  childList.size()  0) {  

           for (Record record : childList) {  

               // 对比找出父节点  

               if (StringUtil.equals(record.getStr("parent_uuid"), parentUuid)) {  

                   listParentRecord.add(record);  

               } else {  

                   listNotParentRecord.add(record);  

               }  

  

           }  

       }  

       // 查询子节点  

       if (listParentRecord.size()  0) {  

           for (Record record : listParentRecord) {  

               // 递归查询子节点  

               record.set("childs", getTreeChildRecord(listNotParentRecord, record.getStr("uuid")));  

           }  

       }  

       return listParentRecord;  

   }  

  

   /** 

    * 说明方法描述:递归找出本节点和他们的父节点 

    *  

    * @param parentList 根据关键字过滤出来的相关节点的父节点 

    * @param resultList 返回的过滤出来的节点 

    * @param filterRecordMap 已经过滤出来的节点 

    * @param allRecordMap 所有节点 

    * @return 

    * @time 2016年5月19日 上午9:53:56 

    * @author yangdong 

    */  

   private ListRecord getSelfAndTheirParentRecord(ListRecord parentList, ListRecord resultList,  

                                                    MapString, Record filterRecordMap,  

                                                    MapString, Record allRecordMap) {  

       // 当父节点为null或者节点数量为0时返回结果,退出递归  

       if (parentList == null || parentList.size() == 0) {  

           return resultList;  

       }  

       // 重新创建父节点集合  

       ListRecord listParentRecord = new ArrayListRecord();  

       // 遍历已经过滤出来的节点  

       for (Record record : parentList) {  

  

           String uuid = record.getStr("uuid");  

           String parent_uuid = record.getStr("parent_uuid");  

  

           // 如果已经过滤出来的节点不存在则添加到list中  

           if (!filterRecordMap.containsKey(uuid)) {  

               listParentRecord.add(record);// 添加到父节点中  

               filterRecordMap.put(uuid, record);// 添加到已过滤的map中  

               allRecordMap.remove(uuid);// 移除集合中相应的元素  

               resultList.add(record);// 添加到结果集中  

           }  

  

           // 找出本节点的父节点并添加到listParentRecord父节点集合中,并移除集合中相应的元素  

           if (StringUtil.isNotBlank(parent_uuid)) {  

               Record parentRecord = allRecordMap.get(parent_uuid);  

               if (parentRecord != null) {  

                   listParentRecord.add(parentRecord);  

                   allRecordMap.remove(parent_uuid);  

               }  

           }  

  

       }  

       // 递归调用  

       getSelfAndTheirParentRecord(listParentRecord, resultList, filterRecordMap, allRecordMap);  

  

       return resultList;  

   }  

[java] view plain copy

//示例  

[java] view plain copy

/** 

     * 说明方法描述:递归查询所有权限 

     *  

     * @param keyword 

     * @param is_deleted 

     * @return 

     * @time 2016年5月10日 下午3:47:50 

     * @author yangdong 

     */  

    public ListRecord getRecordByKeywordRecursive(String keyword, String is_deleted) {  

        // 第一步:查询所有的数据  

        StringBuffer sql = new StringBuffer(  

                                            " select pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon ");  

        sql.append("  from s_author pa");  

        ListObject params = new ArrayListObject();  

        sql.append(" where  pa.is_deleted=? ");  

        params.add(is_deleted);  

        sql.append(" order by pa.sort_number asc ");  

  

  

        ListRecord allRrecords = Db.use(AppConst.DB_DATASOURCE_MAIN).find(sql.toString(), ParamUtil.listToArray(params));  

[java] view plain copy

            //第二步:将list变为树tree结构  

        if (StringUtil.isNotBlank(keyword)) {  

            return super.useListRecordToTreeByKeywords(allRrecords, keyword, "author_name");  

        } else {  

            return super.useListRecordToTree(allRrecords);  

        }  

    }

java递归向上查询

public static boolean isPrimeNumber(int n){

for(int i=2;i=n/2;i++){

if(n%i==0){

return false;

}

关于map递归java和map递归遍历的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-05,除非注明,否则均为首码项目网原创文章,转载请注明出处。