此 API 调用返回一个可能很大的未排序的 List<String>。我需要对其进行排序、搜索并访问随机元素。目前 List 是由 ArrayList 实现的(我检查了源代码),但在未来的某个未知点,API 开发人员可能会选择切换到 LinkedList 实现(不更改接口)。
对我的程序来说,排序、搜索、访问一个可能很大的 LinkedList 会非常慢且不可接受。因此我需要将 List 转换为 ArrayList 以确保我的程序的实际效率。但是,由于 List 很可能已经是 ArrayList,因此不必要地创建 List 的新 ArrayList 副本将是低效的。
鉴于这些限制,我想出了以下方法将 List 转换为 ArrayList:
private static <T> ArrayList<T> asArrayList(List<T> list) {
if (list instanceof ArrayList) {
return (ArrayList<T>) (list);
} else {
return new ArrayList<T>(list);
}
}
我的问题是:这是使用未知实现的列表的最有效方法吗?有没有更好的方法将 List 转换为 ArrayList?有比将 List 转换为 ArrayList 更好的选择吗?