Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164932
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 593
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 09:59
文章分类

全部博文(56)

文章存档

2019年(1)

2018年(26)

2016年(1)

2015年(6)

2014年(22)

我的朋友

分类: Java

2014-02-26 20:27:21


对于引用中的循环引用, 采用如下方式解决


点击(此处)折叠或打开



  1.     HashSet<String> alreadyCal = new HashSet<String>(); //递归计算时,记录那些已经计算过了
  2.     HashSet<String> calculating = new HashSet<String>(); //递归计算时,记录那些正在计算的

  3.     private void getFatherCategorys(String type) {
  4.         HashSet<String> myType = (HashSet<String>) InheritType.get(type);
  5.         HashSet<String> directFatherClone = (HashSet<String>) myType.clone();
  6.         if (alreadyCal.contains(type)) {//已经计算这个类型
  7.             return;
  8.         }
  9.         calculating.add(type);
  10.         for (String father : directFatherClone) {
  11.             if (alreadyCal.contains(father)) {
  12.                 myType.addAll(InheritType.get(father));
  13.                 continue;
  14.             } else if (calculating.contains(father)) {//正在被计算
  15.                 continue;
  16.             } else{
  17.                 getFatherCategorys(father);
  18.                 myType.addAll(InheritType.get(father));
  19.             }
  20.         }
  21.         alreadyCal.add(type);
  22.         calculating.remove(type);
  23.     }

阅读(879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~