我有一个bean类的ArrayList,包含五个字段
Java Bean - MyShares
我想从这个bean类
的arraylist中创建一个fileList的ArrayList我对Java集合没有丰富的知识。那么这将是最短的逻辑。
我现在实现的逻辑如下,现在我想要一个优化的逻辑来
ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();
if (!fileDetails.isEmpty()) {
for (int i = 0; i < fileDetails.size(); i++) {
CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
}
}
if (!CommonUtilities.filePaths.isEmpty()) {
for (int i = 0; i < CommonUtilities.filePaths.size(); i++) {
Log.d(Integer.toString(i), CommonUtilities.filePaths.get(i));
}
}
CommonUtilities.filePaths是我的静态ArrayList,我想在其中存储文件路径
答案 0 :(得分:1)
你做的很好但是你需要在插入null
之前检查路径是否为CommonUtilities.filePaths
。您也可以使用迭代器而不是for循环。
您可以避免两个for循环,只需执行以下操作:
ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();
int j=0;
if (!fileDetails.isEmpty()) {
for (int i = 0; i < fileDetails.size(); i++) {
if(fileDetails.get(i).getPath()!=null){
CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
Log.d(Integer.toString(j), CommonUtilities.filePaths.get(j));
j++;
}
}
}
答案 1 :(得分:0)
我很难理解为什么你会有两个循环。一个循环遍历fileDetails
集合并将路径添加到新集合,然后循环遍历新集合以进行日志记录。在同一循环中执行以下两个步骤:
if (!fileDetails.isEmpty()) {
for (int i = 0; i < fileDetails.size(); i++) {
CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
Log.d(Integer.toString(i), fileDetails.get(i).getPath());
}
}
除此之外,我无法看到如何对此进行优化,因为如果不使用fileDetails循环遍历新数组,则无法将路径添加到新数组中。该逻辑将在O(n)时间内运行
答案 2 :(得分:0)
为什么要再次使用CommonUtilities来获取文件路径?我们可以在迭代时记录同一个实例的路径
ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();
if (!fileDetails.isEmpty()) {
for (int i = 0,n=fileDetails.size(); i < n; i++) {
CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
Log.d(Integer.toString(i),fileDetails.get(i).getPath());
}
}
请参阅构造:
for (int i = 0,n=fileDetails.size(); i < n; i++)
我们可以使用它,前提是,我们确定fileDetails.size()将返回相同的结果(列表未被修改)。 这样可以避免每次调用fileDetails.size()