0

对于每个用户,我都在获取与该用户对应的名称,并且对于每个获取的名称,都有一个对应的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 循环。

请让我知道这是否可以以任何方式改进。

4

3 回答 3

1

对我来说看起来不错,只是我建议将用户名和相应的 ID 放在数据库表中,而不是硬编码。

于 2013-07-09T11:07:26.763 回答
1

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

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

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

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

于 2013-07-09T11:08:38.940 回答
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) {
        }
    }
}
于 2013-07-09T11:45:22.060 回答