二维数据结构的比较 - 简化和更快?

时间:2015-07-08 20:45:52

标签: java algorithm performance

如何简化以下代码并使其更快?

这是二维数据结构的比较。几个文件夹,每个文件夹包含文件,与其他文件夹进行比较。

ArrayList<FolderGroup> userFolders = CommonFunctions.getUserFolders();
if (!userFolders.isEmpty()) {
    for (FolderGroup userFoldersGroup : userFolders) {
        for (FolderGroup publicFoldersGroup : publicGroupsList) {
            if (userFoldersGroup.getName().equals(publicFoldersGroup.getName())) {
                for (File publicFile : publicFoldersGroup.getFiles()) {
                    for (File userFile : userFoldersGroup.getFiles()) {
                        if (publicFile.contains(userFile)) {
                            publicFile.setIsDownloaded(true);
                            userFoldersGroup.setDownloadedCount();
                        }
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

最多userFolders是徒劳的,因为无论如何,当foreach (GetBillForCAResponse eBillResponse in eBillResponseList) { var statementDetailsResponse = GetStatementDetails( new GetStatementDetailsRequest { BatchId = eBillResponse.BatchId, CustomerAccountId = eBillResponse.CA.ToString("000000000"), StatementId = eBillResponse.CAS_NUM.ToString("0000") }); string xmlBill = statementDetailsResponse.StatementAsXML.ToString(); var document = new XmlDocument(); document.LoadXml(xmlBill); ****var saDetailedPageNode = XmlBillParser.GetDetailPageSectionBySA(requestSA, xmlBill);// This is the method of type XmlNodeList if (saDetailedPageNode == null) continue; var customerBill = new CustomerBill(); customerBill.IsSurepay = XmlBillParser.GetSurepayFlagFromBill(document); customerBill.ServiceAddress = XmlBillParser.GetServiceAddress(requestSA, document); customerBill.MonthName = XmlBillParser.GetBillStatementDate(requestSA, xmlBill); customerBill.EqCurPlanBal = XmlBillParser.GetEqualizerCurrentPlanBalance(document); customerBill.EqPymntDue = XmlBillParser.GetEqualizerPaymentDue(document); ****customerBill.Service = GetServiceAccountUsageAndBillingDetail(requestSA, xmlBill, saDetailedPageNode);// This is where the invalid argument is because saDetailedPageNode should be of type XmlNode response.Add(customerBill); } 为空时,最外面的循环将立即终止而不会迭代。

除此之外,我不认为整体复杂性可以降低。但是,您可以通过提取具有有意义名称的方法来使代码更容易理解。

为了获得更高的速度,您可以做的是使用允许您使用更少嵌套循环的数据结构。例如,如果您可以按文件夹组名称查询其他文件夹组集合,则只需迭代其中一个文件夹组集合。标准库附带了一些允许此类查询的集合类,并实现了the Map interfaceDocumentation)。