/别人家的孩子为什么总是很厉害?--Java数组和List
Java 家族中的别人家的孩子–数组
小白一直以为数组和 ArrayList 是一样的,因为 ArrayList 的内部结构就是数组,那为什么数组就成为别人家的孩子呢,让我们看一下吧:
import java.util.ArrayList; import java.util.List; public class TestArray { private static final int batch = 10_000; public static void main(String[] args) { long start = System.currentTimeMillis(); insert2Array(); long end = System.currentTimeMillis(); System.out.println(end-start); insert2List(); System.out.println(System.currentTimeMillis()-end); } static void insert2Array() { int[] nums = new int[batch]; for(int i = 0;i < batch;i++) { nums[i]=i; } } static void insert2List() { List<Integer> nums=new ArrayList<Integer>(); for(int i=0;i<batch;i++) { nums.add(i); } } }
数量级 batch 不同,耗时不同:
别人家的孩子为什么这么优秀?
因为我们在拿自己孩子的缺点,给别人家的孩子的优点进行比较,看看代码:
List<Integer> nums=new ArrayList<Integer>(); // ... nums.add(i);
其中,nums.add (i); 暗含玄机。
因 List 只能存放 Integer 对象型的变量,i 需要先转为 Integer,然后才能插入,就是这个动作影响了主要性能,我们可以验证一下这个问题。
这里还有一点是 list 这需要不断扩容也会耗时。
类型同为 String:
//
public class TestArray2 { private static final int batch = 10_000; public static void main(String[] args) { long start=System.currentTimeMillis(); insert2Array(); long end=System.currentTimeMillis(); System.out.println(end-start); insert2List(); System.out.println(System.currentTimeMillis()-end); } static void insert2Array() { String[] nums = new String[batch]; for(int i=0;i<batch;i++) { nums[i]=""+i; } } static void insert2List() { List<String> nums=new ArrayList<String>(); for(int i=0;i<batch;i++) { nums.add(""+i); } } }
发现自家孩子的优势了吧!


