java编程思想读书笔记——第16章数组

java编程思想读书笔记——第16章数组

16.1~16.5
数组与其余种类容器的区别有三方面:效率 类型 和保存基本类型的能力
在java中数组是一种效率最高的存储和随机访问对象引用序列的方式
他是一个简单的线性序列 访问十分迅速 可是为了这种速度使之他的大小是固定的
ArrayList 能够进行动态扩容 是运用了 当前数组满了 建立一个新数组 把该数组的内容
一个一个复制到新数组当中 这至关的耗费性能因此比 普通数组效率低不少。java

在泛型以前 数组之因此优于容器 是由于 数组能够承载具体的类型,这意味着能够经过编译器检查 来发现你的错误 而容器类只能承载Objectweb

自从有了泛型 和自动拆装箱机制 容器就能够 承载具体的类型 接受编译器的检查 还能够承载基本类型 这使得 数组仅存的优势 只有效率 容器还具备更多的功能编程

数组与泛型不能很好的结合,你不能实例化具备参数化类型的数组好比

 Peel<Banana>[] peels = new Peel<Banana>();
    
 泛型擦出会移除参数类型信息,而数组必须知道他们所持有的类型,以强制保证类型的安全
 虽然不能实例化 可是却能够建立这个引用:

 List<String>[] list;

这段代码不会发生任何错误,并且你能够建立非泛型的数组而后将其转型数组

list = (List<String>[])new List[]();

一旦拥有了对List[]的引用,你就会看到你将获得某些编译器检查安全

list[0] = new ArrayList<String>(); //OK
 list[1] = new ArrayList<Integer>();//报错

若是你想避免编译器或运行错误你能够将list赋值给Objectsvg

Object[] objects = list;