Java学习日记-List集合 & new后JVM做了什么

635 阅读3分钟

集合框架

java.lang.iterable ← java.util.Collection接口

Collection接口下还有 List接口 和 Set接口;

List接口 可以存储一组不唯一 、有序的对象(可以是null);常用实现有 ArrayList 和 LinkedList。

1、 ArrayList集合类

  1. 与数组的区别:

    对数组进行了封装,实现了长度可变、可添加任何数据类型的动态数组,添加的数据都将转成Object类型。

    数组一旦定义长度不可变,只能添加一种数据类型。

    相同点:都是采用在内存中分配连续的空间

  2. 常用方法

    方法说明
    boolean add(Object o)在列表的末尾添加元素o,起始索引位置从0开始
    void add(int index,Object o)在指定的索引位置添加元素o,索引位置必须介于0和列表中元素个数之间
    int size()返回列表中的元素个数
    Object get(int index)返回指定索引位置处的元素,取出的元素是Object 类型,使用前需要进行强制转换
    void set(int index,Object o)将 i 索引位置的元素换为o元素
    boolean contains(Object o)判断列表中是否存在指定元素o
    int indexOf(Object o)返回o元素在集合中出现的索引位置
    boolean remove(Object o)从列表中移除元素o
    Object remove(int index)从列表中删除指定位置的元素,起始索引位置从0开始

2、LinkedList

  1. 采用链表存储方式存储数据

  2. 优缺点:

    • 优点是 插入删除元素时效率比较高
    • 缺点是 查找的效率很低
  3. 支持实现所有List接口可选的列表的操作,并且允许元素值是任何数据,包括null

3、Iterator接口

  1. Iterator接口表示堆集合进行迭代的迭代器,专门实现集合的遍历

  2. 因为它间接继承了iterable,所以它也可以用foreach遍历

  3. 常用方法:

    • hasNext():判断是否存在下一个可以访问的元素,如果仍有元素可迭代,则返回true
    • next():返回要访问的下一个元素
  4. 遍历代码:

    ArrayList list = new ArrayList;
    list.add("张三");
    list.add("王二");
    list.add("麻子");
    Iterator it = list.iterator();
    while(it.hastNext()){
        System.out.println(it.next());
        //String s = (String)it.next(); 从Object类型转String类型
        //System.out.println(s);
    }
    

小灶

1、能被称为修饰符的只有:

​ public、package、private、protected、abstract、final、static

2、为什么要有get/set方法?

​ 因为可以用get/set方法判断输入的数据是否合理,拒绝不合理数据

3、String s = new Student(); 做了什么?

  1. new Student() 在堆中开辟了一个空间
  2. 这个空间的大小由这个类的成员变量决定:
    • String类型是引用类型,空间里存储的是地址,地址约为int类型的,所有开4个字节空间
    • int类型占四个字节的空间;char类型占2个字节空间
    • 一共至少需要:4+4+2=10个字节空间
  3. 空间有了以后JVM给了默认值:0
    • String类型的默认值是null,调用System.identyHashCode(引用变量),输出为 0 ;
      • System.identyHashCode(引用变量) 获取由Object提供的hachCode方法所返回的值
    • int默认值是0;
    • char默认值是空白(\u000)不是空格,在eclipse中为0的char 输出是个方块,在其他编译器里可能是个空白,char默认值的二进制数就是0;
    • boolean的默认值是false,也是0(true = 1,false = 0);在内存中只占1个二进制位,但是磁盘的最小单位是1字节。
  4. 赋完默认值后才会执行"{ }"里的内容({ }、static{ })
  5. 然后执行构造方法

6、构造方法相关

  • 构造方法和非static修饰的都是实例
  • new + 构造器 一起返回了一个new的空间的首地址,将这个地址给了一个变量,所以String s = new Student() 中其实new Student() 才是对象,s 只是接收这个对象的变量。
  • s.setName("Amy") //main() 调用了 s 的setName方法 设置了name 属性的值后 没有返回值;
  • this.name = Amy //我 (this) 的( . ) 名字( name ) 是( = ) Amy