我正在迭代列表列表。在我的代码中listofuserdetailsperAccount
是List<List>
。我正在考虑下面的两种方法,请让我知道哪种方法是正确的,更有效率,应该在java编码中遵循。
方式1 -----
for(int i=0;i<=listofuserdetailsperAccount.size();i++){
List list=(List) listofuserdetailsperAccount.get(0);
}
方式2 ---
for(int i=0;i<=listofuserdetailsperAccount.size();i++){
List list= new ArrayList();
list=(List) listofuserdetailsperAccount.get(0);
}
答案 0 :(得分:3)
我会选择每个循环
for( List userDetailsPerAccount : listOfUserDetailsPerAccount ) {
//anything you want to do with userDetailsPerAccount
}
答案 1 :(得分:0)
方式1 比方式2 更好。在 Way 2 List list= new ArrayList();
中,它将创建一个额外的ArrayList
对象,该对象没有任何用处,这会导致内存消耗。
并且还建议使用特定类型的List<E>
,这样你就不会在运行时强制转换它将是类型安全的。
for(List<E> list : listOfUserDetailsPerAccount){
...
}
在Java 5及以上版本中使用for-each。
答案 2 :(得分:0)
这里有两个问题,两个建议的解决方案。
List<List> listofuserdetailsperAccount
对象输入不正确,因为内部List
是raw type,需要避免。假设您的内部列表包含UserDetail
个对象,则您的列表列表应为List<List<UserDetail>>
类型。您不能使用for-each loop语法迭代List
Iterable
。
for(List<UserDetail> innerList : listofuserdetailsperAccount)
List
初始化为新的ArrayList
(如果您需要,它应为new ArrayList<>()
),然后立即用内容覆盖此值你的外部名单。这意味着您要求Java构造一个新对象,然后由垃圾收集器立即清理,未使用。这是浪费和不必要的。总之,您可能希望这样做:
List<List<UserDetail>> listofuserdetailsperAccount = // initialize your list
for(List<userDetail> innerList : listofuserdetailsperAccount) {
// do work with your innerList now
}
您评论(整理):
因此,在初始化时,我现在正在做这样的事情,如果这是正确的,请告诉我:
List<List<String>> listofAccountdetailsLoggedinUser = null; listofAccountdetailsLoggedinUser = new ArrayList<List<String>>();
或者我不应该把它作为
null
并直接创建这样的对象:List<List<String>> listofAccountdetailsLoggedinUser = new ArrayList<List<String>>();
null
。它不会伤害任何东西,因为它不会构造一个不必要的对象,但是没有理由 - 你可以在一行中声明和初始化变量,就像你在第二个例子中那样。 此外,您不需要在右侧指定ArrayList的类型,只需使用diamond operator <>
,就像这样:
List<List<String>> listofAccountdetailsLoggedinUser = new ArrayList<>();