对于每个用户,我获取与该用户对应的名称,并且对于每个获取的名称,都有一个对应的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循环。
如果可以通过任何方式改进,请告诉我。
答案 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) {
}
}
}