private void shrinkListTo(List<Result> list, int newSize) {
try {
list.retainAll(list.subList(0, newSize);
} catch (UnspportedOperationException e) {
//perhaps log that your using your catch block's version.
for (int i = list.size() - 1; i >= newSize; --i)
list.remove(i);
}
}
}
这可不像你的原版那么直接。如果没有绑定到要传入的 List 实例,那么可以通过调用 subList(int start, int end)轻松返回一个新实例,甚至不需要创建方法。这也将是一个更快的实现,因为(在 Java6中) ,您将获得一个包含您的列表的 AbstractList.SubList实例,其中包含一个偏移量和一个大小。不需要迭代。
public static void shrinkTo(List list, int newSize) {
int size = list.size();
if (newSize >= size) return;
for (int i = newSize; i < size; i++) {
list.remove(list.size() - 1);
}
}
public class ArrayUtil {
public static <T>ArrayList<T> reduceSize(ArrayList<T> models, int size){
int k = models.size();
if ( k > size )
models.subList(size, k).clear();
return models;
}
}