模块依赖关系分析-Java实现
来源:互联网 发布:php smarty 编辑:程序博客网 时间:2024/06/03 18:49
题目描述:
1.一个系统的若干模块间存在相互依赖的关系,如果A模块调用了B模块的接口,那么成为A依赖B,记为A->B
如果A->B,B->A,那么称A和B模块都存在循环依赖。
如果A->B,B->C,C->D,D->B,那么BCD存在循环依赖,A不存在循环依赖,依次类推。
先输入若干模块之间的关系,判断某模块是存在循环依赖。
输入: {0x00, 0x01}, {0x02, 0x03}, {0x03, 0x04} 输出: {0x00, false}, {0x01, false}, {0x02, false}, {0x03, false}, {0x04, false}
import java.util.ArrayList;import java.util.HashSet;import java.util.LinkedHashSet;import java.util.LinkedList;import java.util.Scanner;import java.util.Set;public class Main { static ArrayList<LinkedList<String>> arrayList = new ArrayList<LinkedList<String>>();//存储模块间依赖关系的数据结构 static HashSet<String> hashSet = new HashSet<String>(); //存储具有循环依赖的点 static Set<String> set = new LinkedHashSet<String>();//用来保证按输入顺序输出 //static Set<String> set = new HashSet<String>(); //如果不需要保证输出顺序用HashSet public static void main(String[] args){ Boolean isCrileNode = false; Scanner s = new Scanner(System.in); while(s.hasNext()){ //输入===== String temp; do{ String ss = s.nextLine(); temp = ss; ss = ss.replace("{", ""); ss = ss.replaceAll("[^a-z^0-9]", " "); String[] strings = ss.split("\\s+"); for(int i=0; i< strings.length; i++){ set.add(strings[i]); } AddDependency(strings[0], strings[1]); }while(temp.charAt(temp.length()-1) == ','); CricleNode(); //输出===== int count = 0; for(String str : set){ isCrileNode = MouduleIsCycularDependency(str); count++; if(count != set.size()){ System.out.println("{"+str+", "+isCrileNode+"},"); }else { System.out.println("{"+str+", "+isCrileNode+"}"); } } clear(); } } //添加依赖关系 public static void AddDependency(String Modeled, String DependModuled){ LinkedList<String> linkedList = new LinkedList<String>(); linkedList.add(Modeled); linkedList.add(DependModuled); arrayList.add(linkedList); Boolean change = true; while(change){ change = ConnectList(); } } //判断其中的链表是否有可以相连的 public static Boolean ConnectList(){ if(arrayList.size() > 1){ for(int i = 0; i < arrayList.size()-1; i++){ for(int j= i+1; j < arrayList.size(); j++){ if(arrayList.get(i).getFirst().equals(arrayList.get(j).getLast())){ LinkedList<String> link1 = arrayList.get(j); link1.removeLast(); link1.addAll(arrayList.get(i)); arrayList.remove(j); arrayList.remove(i); arrayList.add(link1); return true; }else if(arrayList.get(i).getLast().equals(arrayList.get(j).getFirst())){ LinkedList<String> link1 = arrayList.get(i); link1.removeLast(); link1.addAll(arrayList.get(j)); arrayList.remove(j); arrayList.remove(i); arrayList.add(link1); return true; } } } } return false; } //获取依赖点集合 public static void CricleNode(){ for(int i = 0; i < arrayList.size(); i++){ int start = arrayList.get(i).indexOf(arrayList.get(i).getLast()); int end = arrayList.get(i).lastIndexOf(arrayList.get(i).getLast()); if(start != end){ for(int j = start; j < end; j++){ hashSet.add(arrayList.get(i).get(j)); } } int start1 = arrayList.get(i).indexOf(arrayList.get(i).getFirst()); int end1 = arrayList.get(i).lastIndexOf(arrayList.get(i).getFirst()); if(start1 != end1){ for(int j = start1; j < end1; j++){ hashSet.add(arrayList.get(i).get(j)); } } } } //判断模块是否存在依赖关系 public static boolean MouduleIsCycularDependency(String ModuleId){ if(hashSet.contains(ModuleId)) return true; return false; } //清空模块数据 public static void clear(){ arrayList.clear(); hashSet.clear(); set.clear(); }}
阅读全文
2 0
- 模块依赖关系分析-Java实现
- 模块依赖关系
- java 类依赖关系静态分析
- Dagger2依赖关系分析
- Jetty7模块之间依赖关系
- BDF2各模块依赖关系
- Java 依赖关系
- Java中的UML关系(泛化,实现,依赖,关联(聚合,组合))
- 分析数据库的依赖关系
- 分析Spring包依赖关系
- 添加模块间的依赖关系
- linux常用软件模块和依赖关系
- 【华为笔试】模块依赖关系判断
- 如何分析class的依赖关系
- UML中类的关系:关联关系、聚合关系、依赖关系、泛化关系、实现关系
- 二进制模块的几种常见依赖关系
- Maven POM文件、多模块以及依赖关系
- 我的linux内核模块关系依赖图
- C++ 结构体内存方式
- 开始记录开发中使用到的正则表达式
- 构建高可用的zookeeper 集群
- 全志R58平台调通s5k5eya(RAW+MIPI)(分色排版)
- python基础的学习
- 模块依赖关系分析-Java实现
- 模拟信号量实现传感器的定时采集
- 进军高校的共享厨房,能否焕发另一春?
- Xmind基础教程-思维导图结构
- 视频直播推流不成功如何排查
- 从Google Play下载应用并不安全,上千款监视软件伪装其中
- 全志R58平台的GPIO引脚控制(草稿)
- Nginx基本配置
- 重装 11G(11.2.0.4) OLAP组件