在这种情况下,我可以避免嵌套for循环吗?

时间:2013-07-09 11:01:19

标签: java

对于每个用户,我获取与该用户对应的名称,并且对于每个获取的名称,都有一个对应的List

我尝试使用以下独立程序复制样本:

package com;

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String args[]) {
        List<String> users = new ArrayList<String>();
        users.add("user101");
        users.add("adminuser");

        for (String user : users) {
            try {
                ArrayList<String> namesCorrespondingtoUser = getNamesCorrespondingtoUser(user);
                for (String Id : namesCorrespondingtoUser) {

                    List<String> Items = getItemsCorrespondingtoId(user, Id);

                    filter(Items, user);
                }
            } catch (Exception e) {
            }
        }
    }

    public static ArrayList<String> getNamesCorrespondingtoUser(String userName)
            throws Exception {
        ArrayList<String> names = new ArrayList<String>();
        if (userName.equals("user101")) {
            names.add("UBSC1");
            names.add("HDBG1");
            names.add("GHYU1");
        }
        if (userName.equals("adminuser")) {
            names.add("UBSC1");
            names.add("HDBG1");
            names.add("GHYU1");
        }
        return names;

    }

    public static List<String> getItemsCorrespondingtoId(String userName,
            String Id) throws Exception {

        return null;
    }

    private static void filter(List<String> Items, String user) {

    }

}

我担心for循环中有for循环。

如果可以通过任何方式改进,请告诉我。

3 个答案:

答案 0 :(得分:2)

我没有看到内循环有任何问题,因为它只会在极少数情况下执行。在教育中你有时会感觉到所有比O(n * log(n))更糟糕的感觉都很糟糕,但在现实世界中,你很少遇到O(n²)的任何问题。

但是你可以尝试改进其他一些事情。

1:在ArrayList<String> getNamesCorrespondingtoUser(String userName)中,您依赖于硬编码的用户名。最好在某处读取/存储别名,否则每次名称更改时都必须触摸代码。

2:抛出Exception通常不是一个好主意,因为它是所有异常的基类,你无法区分实际抛出的异常。很难在这些函数上构建任何错误处理。

答案 1 :(得分:1)

除了我建议在数据库表中使用用户名和相应的ID而不是硬编码之外,我看起来没问题。

答案 2 :(得分:0)

首先,正如其他人提到的那样,双循环本身似乎不是问题。有一些替代方法可以用来替代使用内存来提高速度。一个可能是使用表格表示,就像你正在处理数据库一样,只写一个循环遍历表“行”。以下是您重写main()方法的方法:

public static void main(String args[]) {
    List<String[]> users = new ArrayList<String[]>();
    users.add(new String[]{"user101", "UBSC1"});
    users.add(new String[]{"user101", "HDBG1"});
    users.add(new String[]{"user101", "GHYU1"});
    users.add(new String[]{"adminuser", "UBSC1"});
    users.add(new String[]{"adminuser", "HDBG1"});
    users.add(new String[]{"adminuser", "GHYU1"});

    for (String[] user : users) {
        try {
                List<String> Items = getItemsCorrespondingtoId(user[0], user[1]);

                filter(Items, user[0]);
        } catch (Exception e) {
        }
    }
}