面试题答案
一键面试- 优化思路:
- 由于
ArrayList
默认查找是通过遍历实现,时间复杂度为$O(n)$。为了优化查找,可以借助HashMap
。HashMap
的containsKey
方法时间复杂度为$O(1)$(平均情况)。我们可以在向ArrayList
添加元素的同时,将元素作为key
,其在ArrayList
中的索引作为value
存储到HashMap
中。这样在查找元素时,先通过HashMap
快速判断元素是否存在,如果存在则可通过HashMap
获取其索引,避免在ArrayList
中进行线性查找。
- 由于
- 代码实现:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class OptimizedArrayList<T> {
private ArrayList<T> list;
private Map<T, Integer> map;
public OptimizedArrayList() {
list = new ArrayList<>();
map = new HashMap<>();
}
public void add(T element) {
list.add(element);
map.put(element, list.size() - 1);
}
public boolean contains(T element) {
return map.containsKey(element);
}
public int indexOf(T element) {
return map.getOrDefault(element, -1);
}
}
你可以使用以下方式测试这个类:
public class Main {
public static void main(String[] args) {
OptimizedArrayList<Integer> optimizedList = new OptimizedArrayList<>();
optimizedList.add(10);
optimizedList.add(20);
optimizedList.add(30);
System.out.println("是否包含20: " + optimizedList.contains(20));
System.out.println("20的索引: " + optimizedList.indexOf(20));
}
}