问题一:List存入时未指定泛型,效率影响如何?
private static void test1() {
int n = 1000000;
List list = new ArrayList();
List<Integer> list1 = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
list.add(i);
list1.add(i);
}
Integer value = null;
long start = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
value = (Integer) list.get(i);
}
System.out.println("无泛型:" + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
value = (Integer) list1.get(i);
}
System.out.println("有泛型:" + (System.currentTimeMillis() - start));
}
无泛型:16 有泛型:0
问题二:存入时指定泛型,取出时未指定明白(List嵌套Map等)
private static void test2() {
int n = 10000;
List<HashMap<Integer, Integer>> list = new ArrayList<HashMap<Integer, Integer>>();
for (int j = 0; j < 10; j++) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < n; i++) {
map.put(i, i);
}
list.add(map);
}
Integer value = null;
long start = System.currentTimeMillis();
for (int j = 0; j < 10; j++) {
HashMap map = list.get(j);
for (int i = 0; i < n; i++) {
value = (Integer) map.get(i);
}
}
System.out.println("无泛型:" + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
for (int j = 0; j < 10; j++) {
HashMap<Integer, Integer> map = list.get(j);
for (int i = 0; i < n; i++) {
value = (Integer) map.get(i);
}
}
System.out.println("有泛型:" + (System.currentTimeMillis() - start));
}
无泛型:16 有泛型:15
总结: