java编程思想读书笔记 - 集合 - 数组

数组

1. 数组与其他容器之间的区别有三个:

    效率:数组是一种效率最高的存储 和 随机访问对象的方式;

    类型:数组会对放入其中的对象进行类型检查(编译阶段),其他容器,都是在运行阶段进行类型检查;

    保存基本类型的能力:数组可以保存基本类型,其他容器不行;


2. 数组缺点:数组在创建的时候,大小就被固定了,并且生命周期也是不可改变的。

    ps:java中,数组和容器,都有边界检查;


3. 对象数组和基本类型数组唯一的区别是:对象数组保存的是引用,基本类型数组保存的是值;


4. 数组的初始化:

    数组声明/初始化方式有三种:

   (1)String[] strArray = new String[5];

   (2)String[] strArray = {"a", "b", "c"};

   (3)String[] strArray = new String[] {"a", "b", "c"};

    编程思想上说,当不确定数组元素个数时,可以用第三种初始化方式,不理解,与第二种什么区别

    测试:ps - 结果与预想的不一样

public static void main(String[] args) {
        testBaseType();
        testString();
        testObject();
    }

    private static void testBaseType() {
        int[] a = {1, 2, 3};
        int[] b;

        b = a;

        for (int i = 0; i < b.length; i++) {
            b[i]++;
        }

        for (int i = 0; i < a.length; i++) {
            System.out.println("a" + i + " :" + a[i]);
            System.out.println("b" + i + " :" + b[i]);
        }

        System.out.println("----------------------------");

    }

    private static void testString() {
        String[] strArray1 = {"a", "b", "c"};
        String[] strArray2;

        strArray2 = strArray1;

        for (int i = 0; i < strArray2.length; i++) {
            strArray2[i] = "d";
        }

        for (int i = 0; i < strArray1.length; i++) {
            System.out.println("strArray1" + i + " :" + strArray1[i]);
            System.out.println("strArray2" + i + " :" + strArray2[i]);
        }

        System.out.println("----------------------------");
    }

    private static void testObject() {
        Integer[] a = {1, 2, 3};
        Integer[] b;

        b = a;

        for (int i = 0; i < b.length; i++) {
            b[i]++;
        }

        for (int i = 0; i < a.length; i++) {
            System.out.println("a" + i + " :" + a[i]);
            System.out.println("b" + i + " :" + b[i]);
        }
    }

// 结果:

a0 :2
b0 :2
a1 :3
b1 :3
a2 :4
b2 :4
----------------------------
strArray10 :d
strArray20 :d
strArray11 :d
strArray21 :d
strArray12 :d
strArray22 :d
----------------------------
a0 :2
b0 :2
a1 :3
b1 :3
a2 :4
b2 :4


5、数组初始化默认值:

     对象:默认null

     基本类型:默认0

     布尔型:默认false

     字符型:默认(char)O


6.  java.util类库中,有Arrays类,提供了一系列实用的static方法:

      equals():比较两个数组是否相等;

      fill():以某个值填充数组;

      sort():对数组进行排序;

      binarySearch():在已经排序的数组中查找元素;

      asList():接收任意的数组为参数;

     // TODO 待测试


7. 复制数组:java标准类库提供有static方法 - System.arraycopy(),比for循环复制要快很多;

    测试:ps:结果还是跟预期的不符啊,编程思想说,对象数组复制,只复制引用,我以为a1和b1的内容应该是一样的

public static void main(String[] args) {
        testArrayCopy();
    }

private static void testArrayCopy() {
        int[] a = {1, 2, 3};
        int[] b = new int[3];

        Integer[] a1 = {1, 2, 3};
        Integer[] b1 = new Integer[3];

        String[] strArray1 = {"a", "b", "c"};
        String[] strArray2 = new String[3];

        System.arraycopy(a, 0, b, 0, 3);
        System.arraycopy(a1, 0, b1, 0, 3);
        System.arraycopy(strArray1, 0, strArray2, 0, 3);

        for (int i = 0; i < b.length; i++) {
            b[i]++;
            b1[i]++;
            strArray2[i] = "d";
        }

        for (int i = 0; i < b.length; i++) {
            System.out.println("a " + i + " :" + a[i]);
            System.out.println("b " + i + " :" + b[i]);
            System.out.println("a1 " + i + " :" + a1[i]);
            System.out.println("b1 " + i + " :" + b1[i]);
            System.out.println("strArray1 " + i + " :" + strArray1[i]);
            System.out.println("strArray2 " + i + " :" + strArray2[i]);
        }

    }


// 测试结果

a 0 :1
b 0 :2
a1 0 :1
b1 0 :2
strArray1 0 :a
strArray2 0 :d
a 1 :2
b 1 :3
a1 1 :2
b1 1 :3
strArray1 1 :b
strArray2 1 :d
a 2 :3
b 2 :4
a1 2 :3
b1 2 :4
strArray1 2 :c
strArray2 2 :d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值