首页 > 技术文章 > 第16章_数组:

Xmingzi 2018-04-04 17:52 原文


1:数组的特殊性:
1、数组是效率最高的存储方式,但是为这种速度付出的代价是长度固定生命周期中不可改变
2、数组中存放的固定类型的数据,类型检查在编译和运行期都有。
3、数组支持基本数据类型
以上三个数组的优点,相对于容器,好像只剩下了效率高。但是实际情况中数组很受显示。
2:数组标识符其实是一个引用,指向堆中的一个真实的对象。
3:数组和泛型结合:
1、不靠谱的做法
TestClass<ClassB>[] test = new TestClass<ClassB>[10] //由于擦除会移除类型信息,但是数组还必须要确定类型。
2、 靠谱的做法:
参数化数组本生的类型:
    //实现了可传入任何类型的组。
   class TestClass<T>{ public T[] f(T[] arg){return arg;} } class main{ Integer arr = {1,23,4}; Integer nums = new TestClass<Integer>().f(arr);   //创建类时指定泛型 }
4:Arrays类实用方法:
1、equals() 比较两个数组是否相同(deepEqual()用于多维数组)。(元素位置、值都相同)
2、fill() 用同一个值填充所有的位置。
3、sort() 对数组排序。(可以对基本数据类型,实现了Comparable接口或者关联了Comparator的对象)
4、binarySearch() 在已经排序的数组中查询元素。
5、asList() 将序列或者数组转变为List容器(返回的List不可变)。
6、arraycopy() 复制数组,针对各种类型做了重载,比使用for循环块很多。


杂记:
1:ArrayList可以自动扩充尺寸的数组。
2:@supperss Warnings 抑制警告。
3:泛型使得一些本该在运行期暴露的错误在编译器报错。
4:使用接口可以使我们写出通用的代码。
5:多态通过分离做什么和怎么做将接口和实现类分离开改变了程序的组织接口,提高了扩展性
6:封装通过合并特征和行为来抽象新的数据类型。
7:ArrayList.asList();方法接收一个数组或者以逗号分隔的元素列表。将其装换为list。
使用ArrayList.asList()或取到的list底层表示是数组,所以不制止add()或者delete()方法。
8:显示类型参数说明
    class F{};
    class S1 extends F{};
    class S2 extends F{};
    List<F> f =  Arrays.<F>asList(new S1(),new S2());

 






推荐阅读