我应该迭代一个Java集合来获取一个子集,还是应该先将它转换为数组然后迭代才能得到它?

tom*_*tom 6 java iteration collections performance

我正在调用一个API,它返回一个对象集合.我想得到一些对象的子集.我正在考虑两种解决方案.哪一个会给我更好的表现?根据我的理解,toArray()调用主要是迭代一次收集.如果这是真的,那么解决方案会更好吗?

解决方案1 ​​ -

public static List<String> get(UUID recordid, int start, int count) {
    List<String> names = new ArrayList<String>();

    ...

    Collection<String> columnnames = result.getColumnNames();
    int index = 0; 
    for (UUID columnname : columnnames) {
        if ((index >= start) && (index - start < count)) {
            names.add(columnname);
        }
        index++;
    }

    return names;
}
Run Code Online (Sandbox Code Playgroud)

解决方案2 -

public static List<String> get(UUID recordid, int start, int count) {
    List<String> names = new ArrayList<String>();

    ...

    Collection<String> columnnames = result.getColumnNames();
    String[] nameArray = columnnames.toArray(new String(columnnames.size()));

    for (int index = 0; index < nameArray.length && count > 0; index++, count--) {
        names.add(nameArray[index]);
    }

    return names;
}
Run Code Online (Sandbox Code Playgroud)

SWo*_*ste 18

如果您的Collection是List,则可以使用该subList(fromIndex, toIndex)方法.

例:

List<String> x = new ArrayList<String>();
List<String> y = x.subList(5, 10);
Run Code Online (Sandbox Code Playgroud)


Eug*_*sky 7

当然,迭代一个集合比首先将它转换为数组,然后遍历数组要好.

第二种方法提供额外的时间和内存费用:

  1. 数组的分配内存
  2. 使用集合的内容填充数组