Java核心技术读书笔记5-3 泛型数组列表ArrayList类与枚举类

3.泛型数组列表

Java数组可以不像C++那样必须在编译时确定长度,但Java数组仍然是定义长度后就不可更改了。这个问题可以由ArrayList类实现动态数组来解决。
ArrayList维护一个内部数组,若添加元素时数组已满,则会常见一个更大的数组,并把原值复制过来。
new ArrayList<>(n);代表初始容量而不是最终固定容量,若数组确认不会变化的时候可以调用trinToSize()方法回收无用空间。

3.1 方法:add为插入元素,set为替换元素(若被替换位置没有元素则会报错),remove为移除元素。

4.对象包装器与自动拆装箱

包装器的值是不可变的。对基本数据类型的包装器进行运算实际上都是经过自动拆箱->运算->装箱的。这些过程是编译器负责的,实际上生成字节码时,编译器会自动的插入必要方法调用。这些操作与虚拟机无关,虚拟机只负责处理生成好的代码。

5.参数数量可变的方法

可变参的序列必须放置在参数列表的最后部分,形式如下:

public void aMethod(int a, SomeType... args){
    ...
}

可变参的参数类型必须一致,可以是基本数据类型也可以是引用数据类型。
对于方法的调用者,对可变参可以传入多个变量,也可以传入一个数组。对于方法体内的接受者,args的形式是一个数组。

6.枚举类

枚举类相当于刚好有n个实例的类,在比较两个枚举类值的时候直接使用"=="而不要使用equals()

public enum EnumTest {
    SMALL, //调用无参构造器,构造一个类型为EnumTest的枚举常量EnumTest.SMALL, 其name属性为SMALL。
    MEDIUM("M"), //同样构造枚举常量,但使用了有参构造器,为域abbreviation赋值为“M”
    LARGE,
    EXTRA_LARGE; //上述枚举常量,构造时用","隔开,最后一个常量后加分号;
    private String abbreviation;

    private EnumTest() {
    }

    private EnumTest(String abbreviation){
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() {
        return abbreviation;
    }
}

     /**
     * 下面为测试代码
     **/
    EnumTest e = EnumTest.MEDIUM;
    System.out.println(e.name()); //返回MEDIUM
    System.out.println(e.toString()); //返回MEDIUM
    System.out.println(e.getAbbreviation()); //返回域的值"M"
    EnumTest medium = Enum.valueOf(EnumTest.class, "MEDIUM"); //使用name属性和枚举类对象构造一个枚举类对象
    System.out.println(e == medium); //true
    for (EnumTest curE : EnumTest.values()) { //返回枚举类的所有枚举常量构成的数组
       System.out.print(curE.ordinal()+" "); //0 1 2 3 枚举常量在枚举类中定义的下标
       System.out.print(curE+" "); //SMALL MEDIUM LARGE EXTRA_LARGE
     }

posted @ 2021-11-09 15:41  芝芝与梅梅  阅读(61)  评论(0)    收藏  举报