javaSE之集合


集合|容器

存储多个数据

  1. 数组特点:存储多个数据,一段连续的内存空间

    1. 引用数据类型

    2. 定长,长度一旦确定不可改变

    3. 存储数据的类型相同

    4. 有序,有索引

  2. 集合:

    1. 存储任意引用数据类型

    2. 集合的长度可以改变,可根据需求动态的增删减改,长度随之改变

 

容器中的接口层次结构

  1. Collection:单个值的集合

    1. set:无序不可重复

    2. List:有序可重复,有索引

  2. Map:键值对的集合(Key-VALUE)

遍历方式:

  1. for...each

  2. iterator迭代器

 

泛型

  1. 参数化类型:数据类型作为参数传递,只能配置引用数据类型

  2. <>定义泛型:泛型的行为发生在编译期间,运行期间发型配置的所有内容无效,泛型擦除,要求先定义泛型,才能使用泛型

  3. 泛型类 : 类型的后面定义泛型,在使用类型的时候可以通过泛型传递具体的类型,类中可以进行使用

  4. 泛型优点:

    1. 代码简单简洁

    2. 增强程序健壮性,避免类型转换异常的出现

    3. 增强稳定性与可读性

 

ArrayList :

实现所有可选列表操作,并允许所有元素,包括null 。

  1. 底层结构: 数组 Object[] elementData;

  2. 特点: 根据索引查询遍历效率较高,增删效率低

  3. 应用场景: 适合应用在大量做查询,少量做增删的位置

  4. 扩容问题:

    1. 初始容量 : 默认初始容量为10 ,在第一次添加add的时候进行构建

    2. 扩容机制 : 每次扩容原容量的1.5倍

  5. 新增功能: void forEach(Consumer<? super E> action)

  6. 遍历 :

    1. 普通for

    2. 增强for

    3. iterator迭代器

    4. listIterator迭代器

 

Vector:

  1. 底层结构 : 数组

  2. 特点 : 与ArrayList相同

  3. 区别:

    1. Vector是同步的|线程安全。 ArrayList不同步|线程不安全,相对效率较高

    2. Vector每次扩容原容量的2倍。ArrayList每次扩容原容量的1.5倍,相对ArrayList更有利于节省内存

总结:如果不需要线程安全,建议使用ArrayList代替Vector

 

LinkedList:

实现所有可选列表操作,并允许所有元素(包括null )。

  1. 底层结构: 双向链表

  2. 特点: 查询效率低,增删效率高

  3. 应用场景:单个数据值的集合中,允许数据有序,且可重复,在大量做增删,销量做查询的时候时候适合使用链表

  4. 新增功能: 新增了一些与链表头尾相关的方法

注意:此实现不同步