0

我有一个包含五个字段的bean类的ArrayList

Java Bean -- MyShares

  1. 文件名
  2. 文件路径
  3. 文件大小
  4. 是共享的
  5. 创作者

我想从这个bean类的arraylist中制作一个filePath的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

4

3 回答 3

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++;
              }
            }
        }
于 2013-04-11T11:42:15.393 回答
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) 时间内运行

于 2013-04-11T11:42:52.773 回答
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()

于 2013-04-11T11:55:07.220 回答